简单选择排序

本文将用图例介绍冒泡排序的过程,和经典的优化板子

算法思想

每一趟(如第 i 趟)在后面 n - i + 1(i从1开始)个待排序元素中选取最小的元素,作为有序子序列的第 i 个元素,直到 n - 1 趟做完,只剩最后一个元素时,就不需要再选了。

一个简单的例子:

image-20230122222342741

算法特性

时间复杂度:雷打不动O(n2),堪称经典内排序里面最弱的

空间复杂度:O(1)

稳定性:不稳定

算法模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void select_sort(){
// n个元素,比 n - 1 趟
for(int i = 0 ; i < n - 1 ; i++){
int k = i; // 记录最小的那个元素下标,一开始默认第一个

// 从第二个开始找,找到最后,与记录的最小值一一比较
for(int j = i + 1 ; j < n ; j++){
// 如果出现更小的就替换给 k
if(q[j] < q[k])
k = j;
}
// 最小的元素和下标为i的元素交换
swap(q[i],q[k]);
}
}

技术支持