1.基于桶的排序
- 桶排序
简介:
- 判断数据的范围,将数据范围划分为桶
- 将数据放入桶中
- 桶内进行任意排序
- 桶的个数最多时为计数排序
应用:
- 计数排序
简介:
- 选取数组中的最大值
max
和最小值min
- 使用一个大小为
max - min + 1
的数组help
,遍历原数组,某个值出现一次,便在数组中加1 - 根据
help
中出现的个数,给出新数组的结果
应用:
- 基数排序
- 可以用于任意进制,常用于10进制,高位不足时补0
- 先根据个位进行稳定的排序算法
- 依次到高位进行稳定的排序算法
- 当只有一位数时为计数排序
2.基于插入的排序排序
- 插入
- 希尔
简介:
增量序列,如[len/2,len/4,……1]
当序列为len/2
时,假如有10个元素,那么共分为5个组(第1个元素和第6个元素是一组,第2个元素和第7个元素是一组……)将每个组进行插入排序;下一次增量变小,每个组内元素变多,再进行插入排序,直到增量为1,进行一次所有元素的插入排序。复杂度为O(n^1.3)------O(n^2)
应用:
5.基于选择的排序
- 简单选择排序
- 桶排序
4.基于交换的排序
- 快排
- 冒泡
5.基于归并的排序
- 二路归并
- 多路归并
6. 应用场景
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。
若要求排序稳定,则可选用归并排序。但前面介绍的从单个记录起进行两两归并的排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子序列,然后再两两归并之。因为直接插入排序是稳定 的,所以改进后的归并排序仍是稳定的。