选择排序是最简单直观的排序算法
该算法的核心思想是每次遍历数组选择最小的数放到最前面,然后在遍历剩下的数组,该算法不管数组起始是什么样子的,都会循环N-1次
假设有数组 3,5,1,2,4
第一次循环:1,5,3,2,4
第二次循环:1,2,3,5,4
第三次循环:1,2,3,5,4
第四次循环:1,2,3,4,5
剩下最后一个数肯定是最大的了,所以不用处理,如果想从大到小就反过来就行了
性质
中文名称 | 英文名称 | 平均时间复杂度 | 最坏时间复杂度 | 最好时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|---|
选择排序 | Selection | n2 | n2 | n2 | 1 | 不稳定 |
上代码,sort1和sort2写法稍有不同,但是编译器后估计长得都一样
public static void sort(int arr[]){
for (int i = 0; i < arr.length; i++) {
int minNum = arr[i];
int index = i;
for (int j = i; j < arr.length; j++) {
if(arr[j] < minNum){
minNum = arr[j];
index = j;
}
}
arr[index] = arr[i];
arr[i] = minNum;
}
}
public static void sort2(int arr[]){
for (int i = 0; i < arr.length; i++) {
//每次循环开始设置当前值为最小值
int index = i;
for (int j = i; j < arr.length; j++) {
if(arr[j] < arr[index]){
index = j;
}
}
if(index != i){
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
}