
选择排序是几乎每一个Java程序员的必备技能,并没有比插入排序难多少,也是学习其它Java排序的基础@mikechen
选择排序定义
选择排序,英文名为Select Sort,选择排序是一种排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。
何谓选择排序:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止。
选择排序基本思想
选择排序和插入排序很相似,也区分已排序区间和未排序区间,选择排序是每次从未排序区间找到最小的元素放到已排序区间的末尾。
选择排序的基本思路,主要分为如下3步:
1)首先:给定一组记录,从头到尾经过第一轮比较后得到最小的记录,与第一个记录的位置交换;
2)其次:接着对不包括第一个记录以外的其他记录进行第二次比较,得到最小记录与第二个位置记录交换;
3)最后:重复第二步,一直到比较的记录只剩下一个为止。
选择排序图解
上面我们理解了大致的思路,下面我们看一个动图就会更加清楚。
下图所示:

1)红色表示当前最小的元素;
2)绿色表示正在比较的元素;
3)黄色表示已经排好的元素。
一共经历7次排序,过程如下:

最后排序的结果就变成:
13,27,38,49,49,65,76,97
选择排序代码案例
上面我们了解了思路与原理,下面我们具体代码实现。
代码如下:
//选择排序
public static void selectionSort(int[] arr){
//定义一个数,用于记录找到的数
int temp = 0;
//第一层for循环为执行的总次数,因为执行到倒数第二个数是,数组已经有序,故arr.length -1
for(int i = 0; i < arr.length -1; i++){
//用于记录下标
int index = i;
//这里是从i开始后的所有数都要进行比较
for (int j = i + 1;j < arr.length; j++){
//如果发现有比arr[i]大的,则更新下标,这样是为了最终找到最小的那个数的下标
if (arr[index] > arr[j]){
index = j;
}
}
//如果进入循环前的i发生了变化,则证明有数更小,并且更小的数,下标为j,直接交换即可
if (index != i){
temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
}
关于mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。