编程语言
首页 > 编程语言> > 《数据结构》(C++)之第八章:排序技术

《数据结构》(C++)之第八章:排序技术

作者:互联网

8.1 概述

8.1.1 排序的基本概念
8.1.2 排序算法的性能(衡量标准)

8.2 插入排序

8.2.1 直接插入排序
8.2.2 希尔排序

8.3 交换排序

8.3.1 起泡排序
8.3.2 快速排序(分区交换排序)

8.4 选择排序

8.4.1 简单选择排序
8.4.2 堆排序
1、堆的定义
2、堆排序

8.5 归并排序

8.5.1 二路归并排序的非递归实现
8.5.2 二路归并排序的递归实现

8.6 分配排序

8.6.1 桶式排序
8.6.2 基数排序

8.7 各种排序方法的比较

排序方法 时间平均情况 时间最好情况 时间最坏情况 辅助空间 稳定性
直接插入排序 O(n的平方) O(n) O(n的平方) O(1) 稳定
希尔排序 O(n * log以2为底的n)~O(n的平方) O(n的1.3次方) O(n的平方) O(1) 不稳定
起泡排序 O(n的平方) O(n) O(n的平方) O(1) 稳定
快速排序 O(n * log以2为底的n) O(n * log以2为底的n) O(n的平方) O(log以2为底的n)~O(n) 不稳定
简单选择排序 O(n的平方) O(n的平方) O(n的平方) O(1) 不稳定
堆排序 O(n * log以2为底的n) O(n * log以2为底的n) O(n * log以2为底的n) O(1) 不稳定
归并排序 O(n * log以2为底的n) O(n * log以2为底的n) O(n * log以2为底的n) O(n) 稳定
1、时间复杂度
2、空间复杂度
分类 排序方式 空间复杂度
1 归并排序 O(n)
2 快速排序 O(log以2为底的n)~O(n)
3 基数排序 O(m)
4 其他排序方式 O(1)
3、稳定性
稳定性 排序方式
稳定 直接插入排序、起泡排序、归并排序、基数排序
不稳定 希尔排序、快速排序、简单排序、堆排序
4、算法简单性
简单算法 改进算法
直接插入排序 希尔排序
简单选择排序 堆排序
起泡排序 快速排序
桶式排序 基数排序
/ 归并排序
5、待排序的记录个数n的大小(–>记录的比较次数)
6、记录本身信息量的大小(–>记录的移动次数)
7、关键码的分布情况
总结
序号 排序方式 应用场景
1 快速排序 待排序记录个数n较大,关键码分布随机,且对稳定性不作要求时
2 归并排序 待排序记录个数n较大,内存空间允许,且要求排序稳定时
3 堆排序、归并排序 待排序记录个数n较大,关键码分布可能出现正序或逆序的情况,且对稳定性不做要求时
4 堆排序、简单选择排序 待排序记录个数n较大,只需找出最大/最小的前几个记录
5 直接插入排序 当待排序记录个数n较小(如小于100)时,记录基本有序,且要求稳定时
6 简单选择排序 待排序记录个数n较小,记录所含数据项较多,所占存储空间较大时
7 快速排序/归并排序直接插入排序 混合使用 1⃣ 在快速排序中划分的子序列长度小于某个值时,转而调用直接插入排序 2⃣ 对待排序记录序列先逐段进行直接插入排序,然后再利用“归并”操作进行两两归并直至整个序列有序

标签:归并,数据结构,记录,关键码,第八章,C++,有序,序列,排序
来源: https://blog.csdn.net/chileme/article/details/96101626