1. 思路
选择排序:遍历当前数组,每次把 当前位置右边 最小(大)的放到当前位置。每次前面的先排好。
2. 过程
* 分成两端,左侧是已经排序的,右侧是未排序的
* 分界线是当前的 i
* 每次选择 [i,arr.length-1]上最小的元素的坐标
* 这个元素和 i 位置互换
* 就能做到每次 i 位置都是右边最小的了
3. 代码
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[minIndex] < arr[j] ? minIndex : j;
}
swap(arr, i, minIndex);
}
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}