选择排序
注意:【其实这里每次比较,是不会每次交换值的,只会记录最小值和最小值的下标,只有当找到最小值的时候才会交换值,主要是为了方便演示】
要排序的元素:6 5 4 3 2 1
假设min=6
第一次循环
第一次比较
5 6 4 3 2 1 min=5
第二次比较
4 6 5 3 2 1 min=4
第三次比较
3 6 5 4 2 1 min=3
第四次比较
2 6 5 4 3 1 min=2
第五次比较
1 6 5 4 3 2 min=1 已经找到最小值了
第二次循环
第一次比较
1 5 6 4 3 2 min5
第二次比较
1 4 6 5 3 2 min=4
第三次比较
1 3 6 5 4 2 min=3
第四次比较
1 2 6 5 4 3 min=2 已经找倒最小值了
第三次比较
第一次比较
1 2 5 6 4 3 min=5
第二次比较
1 2 4 6 5 3 min=4
第三次比较
1 2 3 6 5 4 min=3 已经找倒最小值了
第四次比较
第一次比较
1 2 3 5 6 4 min=5
第二次比较
1 2 3 4 6 5 min=4 已经找到最小值了
第五次比较
第一次比较
1 2 3 4 5 6 min=5 已经找到最小值了
总结
public static void chooseTest(){
int[] arr = {6,5,4,3,2,1};
int min = 0;//最小值
int minIndex = 0;//最小值下标
//每经过一次外层循环,就会找到最小值
for (int i = 0; i < arr.length - 1; i++) {
//然后以下一个下标对应的值为最小值,依次进行比较
min = arr[i];
for (int j = i + 1; j < arr.length; j++) {
//为什么是j= i + 1?
//因为已经找到的最小值,不参与比较排序
if (min > arr[j]){
minIndex = j;//记录最小值的下标
min = arr[j];//记录最小值
}
}
// 将找到的最小值进行交换
arr[minIndex] = arr[i];
arr[i] = min;
}
System.out.println(Arrays.toString(arr));
}