排序算法中可以大致分为以下几类
- 插入类排序:直接插入排序、折半插入排序、希尔排序
- 选择类排序:简单选择排序、堆排序
- 交换类排序:冒泡排序、快速排序
简单选择排序
简单选择排序的实现思路是
-
一个长度为n的数组arr,选取第一个元素与后面所有元素比较,记录下最小元素的位置,与第一个元素交换。
-
重复步骤1,遍历数组元素i,扫描i之后的所有元素,记录下最小元素的位置,与第i个元素交换
-
直到遍历完所有元素
具体实现,红色字体为交换的元素
复杂度
最好情况:如果数组是一个升序序列,则不需要移动。
最坏情况:即待排序记录初始状态是按第一条记录最大,之后的记录从大到小顺序排列,则需要移动记录的次数最多为3(n-1)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为**O(n^2)
,进行移动操作的时间复杂度为O(n)** 。
稳定性
简单选择排序是不稳定排序。