简单选择排序
- 简单选择排序是交换排序类型的一种,其排序思想为:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
- 简单选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。
算法步骤
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
- 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
动图演示

数据处理流程

算法分析

时间复杂度
- 简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1)/2。
- 而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0.
- 当序列反序时,移动次数最多,为3N(N-1)/2。
- 所以,综合以上,简单排序的时间复杂度为 O(N2)。
空间复杂度
- 简单选择排序需要占用 1 个临时空间,在交换数值时使用。
参考代码
//选择排序函数
void selection_sort(int arr[], int len){
int i,j;
for (i = 0 ; i < len - 1 ; i++){
int min = i;
for (j = i + 1; j < len; j++) //查找未排序的元素
if (arr[j] < arr[min]) //寻找最小值
min = j;
int temp = arr[min];
arr[min]= arr[i];
arr[i] = temp;
}
}