直接插入排序: 将数组分为两个子表 ,前边是有序子表,后边是待排序子表,每次将一个带排序的关键字插入到前边已经排序好的序列之中,直至全部记录插入完成为止;
package Sort;public class InsertSort { //直接插入排序 public static void main(String[] args) { //定义一个数组 int[] arr = {24, 69, 57, 13}; System.out.println("排序前:" + arrayToString(arr)); System.out.println("排序前:" + arrayToString(Insert(arr))); } public static String arrayToString(int[] arr) { //输出列表方法 StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < arr.length; i++) { if (i == arr.length - 1) { sb.append(arr[i]); } else { sb.append(arr[i] + ","); } } sb.append("]"); String s = sb.toString(); return s; } public static int[] Insert(int[] arr) { // 直接插入排序 for (int i = 1; i < arr.length; i++) { //从第二个元素开始 int temp = arr[i]; int j; for (j = i; j > 0; j--) { if (arr[j - 1] > temp) { arr[j] = arr[j - 1]; } else break; } arr[j] = temp; } return arr; }}
折半
冒泡排序 : 属于交换排序:从前往后(从后往前)不断与相邻的关键字比较若大于相邻的(小于)则交换,直至一趟循环没有产生交换,即为排序成功;
package Sort;public class MaoPaoSort { //冒泡排序 public static void main(String[] args) { //定义一个数组 int[] arr = {24, 69, 57, 13}; System.out.println("排序前:" + arrayToString(arr)); System.out.println("排序前:" + arrayToString(Bubble(arr))); } public static String arrayToString(int[] arr) { //输出列表方法 StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < arr.length; i++) { if (i == arr.length - 1) { sb.append(arr[i]); } else { sb.append(arr[i] + ","); } } sb.append("]"); String s = sb.toString(); return s; } public static int[] Bubble(int[] arr) { //冒泡排序 for (int i = 0; i < arr.length - 1; i++) { boolean falg = false; for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { int q = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = q; falg = true; } } if (falg = false) { break; } } return arr; }}