选择排序
2024年04月03日
一、认识
选择排序简单直观,英文称为Select Sort
,先在数据中找出最大或最小的元素,放到序列的起始;然后再从余下的数据中继续寻找最大或最小的元素,依次放到排序序列中,直到所有数据样本排序完成。
特点:
- 不稳定排序: 如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排。选择排序的过程会破坏原有数组中相同关键字的相对次序,所以选择排序是不稳定算法
- 原地排序: 在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序
- 排序方式: In-place (不占用额外内存,只占用常数内存)
- 时间复杂度: O() [n 代表数据规模及数据量大小]
- 空间复杂度: O(1)
扩展:
- 排序算法的稳定性:
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i] = r[j],且 r[i] 在 r[j] 之前,而在排序后的序列中,r[i] 仍在 r[j] 之前,则称这种排序算法是稳定的;否则称为不稳定的。
那么排序算法的稳定性有什么意义呢?其实它只在一种情况下有意义:当要排序的内容是一个对象的多个属性,且其原本的顺序存在意义时,如果我们需要在二次排序后保持原有排序的意义,就需要使用到稳定性的算法。
- 冒泡排序和选择排序的相同点和不同点:
- 相同点:
- 都是两层循环,时间复杂度都为 O(n^2)
- 都只使用有限个变量,空间复杂度 O(1)。
- 不同点:
- 冒泡排序在比较过程中就不断交换;而选择排序增加了一个变量保存最小值 / 最大值的下标,遍历完成后才交换,减少了交换次数。
- 冒泡排序法是稳定的,选择排序法是不稳定的。
- 相同点: