
冒泡排序:
从第一个数开始,和后一位对比,大的数后移。
public static void bubbleSort(int[] arr) {if (arr == null || arr.length < 2) {return;}for (int end = arr.length - 1; end > 0; end--) { //大的数冒泡到末尾之后,固定这个最大数,把end前移for (int i = 0; i < end; i++) { //不会越界,i只到end-1,但会与end下标的值对比if (arr[i] > arr[i + 1]) {swap(arr, i, i + 1);}}}}
选择排序:
i到n遍历选最小值放下标i位置。
例:
0到所有选一最小值,放0位置,
1到所有,选最小值,放1位置
……
public static void selectionSort(int[] arr) {if (arr == null || arr.length < 2) {return;}for (int i = 0; i < arr.length - 1; i++) {int minIndex = i; //每轮的最小值都不同,因此在此定义for (int j = i + 1; j < arr.length; j++) {minIndex = arr[j] < arr[minIndex] ? j : minIndex;}swap(arr, i, minIndex); //最小值放入下标为i的位置}}
插入排序:
类似扑克牌等牌插入,假设插入的是第i个牌,有arr.length-1个待插入
public static void insertionSort(int[] arr) {if (arr == null || arr.length < 2) {return;}for (int i = 1; i < arr.length; i++) {for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) { //j是i前一个数,j与j+1比较,下标往前挪,逐个向前比较,直到j<0swap(arr, j, j + 1);}}}
希尔排序:
初始增量为length/2,缩小增量继续以gap=gap/2的方式,进行分组,每组使用直接插入排序,随着增量减少,每组元素越多,增量为1时,这个数组为一组,算法结束。

void shell_sort(int *data, int length) {int gap = 0;int i = 0, j = 0;int temp;for (gap = length / 2;gap >= 1; gap /= 2) {for (i = gap;i < length;i ++) {temp = data[i];for (j = i-gap;j >= 0 && temp < data[j];j = j - gap) {data[j+gap] = data[j];}data[j+gap] = temp;}}}
归并排序:
base case:划分至最小规模,就不用再划分
public static void mergeSort(int[] arr) {if (arr == null || arr.length < 2) {return;}mergeSort(arr, 0, arr.length - 1);}public static void mergeSort(int[] arr, int l, int r) {if (l == r) {return;}int mid = l + ((r - l) >> 1);mergeSort(arr, l, mid);mergeSort(arr, mid + 1, r);merge(arr, l, mid, r);}public static void merge(int[] arr, int l, int m, int r) { //外排:归并排序;int[] help = new int[r - l + 1];int i = 0;int p1 = l;int p2 = m + 1;while (p1 <= m && p2 <= r) {help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++]; //都不越界时,最小数存help里,指针再加1;}while (p1 <= m) {help[i++] = arr[p1++]; //p2越界,p1存入help;}while (p2 <= r) {help[i++] = arr[p2++];}for (i = 0; i < help.length; i++) {arr[l + i] = help[i]; //按顺序存回数组中;}}
