第一次从arr[0]~arr[n-1]中选择最小值与arr[0]交换;第二次从arr[1]~arr[n-1]中选择最小值与arr[1]交换;......;第(n-1)次从arr[n-2]~arr[n-1]中选择最小值与arr[n-2]交换,总共进行(n-1)次。如:
原始数组为:101 34 119 1
第一轮排序:1 34 119 101
第二轮排序:1 34 119 101
第三轮排序:1 34 101 119
说明:
-
选择排序共有(数组大小-1)轮排序
-
每一轮排序均是一个循环
2.1 先假定当前数为最小数
2.2 然后和后面的数字逐个比较,若发现有比当前更小的数,就重新确定最小数,并得到下标
2.3 遍历到数组最后时,就得到本轮最小数及其下标
2.4 交换
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
int minIndex = i;
int min = arr[i];
for (int j = i+1; j < arr.length; j++) {
if (min > arr[j]) {//假定最小值,但并非最小
min = arr[j];
minIndex = j;
}
}
//将最小值放在arr[i],进行交换
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
System.out.println(Arrays.toString(arr));
}