之前有发过冒泡排序,插入排序,本次我们就来看看选择排序是如何实现的,与前两个排序算法一样,通过嵌套循环实现排序只是中间交换逻辑不一样,插入排序主要从头到尾依次比较然后取比比较值小的数字中最小/最大的那个,然后交换位置,最终实现排序。
注:文中最小/最大是根据从小到大升序/从大到小降序逻辑定的。
动图演示
代码实现
public static void main(String[] args) {
//排序数组
int[] arr = {5,6,3,1,8,7,2,4};
//最小数字下标
int minIndex = 0;
//数组长度
int arrLen = arr.length;
//数组长度减1是因为前面数字排序后最后一个为最大值或最小值
for (int i = 0; i < arrLen - 1; i++) {
minIndex = i;
for (int j = i + 1; j < arrLen; j++) {
//比较运算符>是从小到大排序,如果需要从大到小排序则改成<
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
//把最小值替换到最前面
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
//排序后
System.out.print("第"+(i+1)+"轮排序后结果:");
for (int item : arr) {
System.out.print(item);
}
System.out.println("");
}
//排序后
System.out.print("排序后结果:");
for (int item : arr) {
System.out.print(item);
}
}
执行结果:
第1轮排序后结果:16358724
第2轮排序后结果:12358764
第3轮排序后结果:12358764
第4轮排序后结果:12348765
第5轮排序后结果:12345768
第6轮排序后结果:12345678
第7轮排序后结果:12345678
排序后结果:12345678