/**
- 选择排序
- @param arr 需要排序的数组
*/
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int min = i; / 将当前下标定义为最小值下标
for (int j = i + 1; j < arr.length; j++) {
if (arr[min] > arr[j]) { /* 如果有小于当前最小值的关键字 */
min = j; /* 将此关键字的下标赋值给min */
}
}
if (i != min) {/* 若min不等于i,说明找到最小值,交换 */
int tmp = arr[min];
arr[min] = arr[i];
arr[i] = tmp;
}
}
}
(4)归并排序 Merge Sort
/**
- 归并排序
- @param a 需要排序的数组
- @param s 第一个有序表的起始下标
- @param m 第二个有序表的起始下标
- @param t 第二个有序表的结束下标
- */
public static void merge(int[] arr, int s, int m, int t) {
int[] tmp = new int[t - s + 1];
int i = s, j = m, k = 0;
while (i < m && j <= t) {
if (arr[i] <= arr[j]) {
tmp[k] = arr[i];
k++;
i++;
} else {
tmp[k] = arr[j];
// sum += (j - i) - (j - m);
j++;
k++;
}
}
while (i < m) {
tmp[k] = arr[i];
i++;
k++;
}
while (j <= t) {
tmp[k] = arr[j];
j++;
k++;
}
System.arraycopy(tmp, 0, arr, s, tmp.length);
}