数据结构排序-总结
一:排序的基本概念:
假设含有n个记录的序列为{r1,r2,r3…rn},其相应的关键字为{k1,k2, k3,…kn},需确定1,2,3…n的一种排列p1,p2,…pn使其相应的关键字满足kp1<=kp2<=kp3<=…kpn非递减(或非递增)关系,及时的序列称为一个按关键字有序的序列{rp1,rp2,rp3…rpn},这样的操作就称为排序。
二:排序的分类:
1:内排序和外排序
按照排序过程中涉及的存储器的不同分为内排序和外排序。
内排序:指待排序序列全部存放在内存中进行的排序过程,这种方法适用于数量不太的 数据元素的排序。
外排序:指待排序的数据元素非常多,以至于它们必须存储在外部存储器上,这种存储方式需要内外存多次交换数据才能进行,这样的排序称为外排序。
2:稳定排序和不稳定排序
稳定排序:对任意一组数据元素序列,使用某种排序算法对它们进行按照关键字的排序,若相同关键字的前后位置关系在排序前后保持一致,则称此排序方法为稳定排序。
不稳定排序:对任意一组数据元素序列,使用某种排序算法对它们进行按照关键字的排序,若相同关键字的前后位置关系在排序前后保持一致,则称此排序方法为不稳定排序。
例如:关键字序列为{3,4,6,2,8(1),9,8(2),1},经过排序后变为{1,2,3,4,6,8(1),8(2),9},则此次排序是稳定的,若变为{1,2,3,4,6,8(2),8(1),9},则此次排序是不稳定的。
排序算法的性能评价:
- 时间复杂度:排序算法的时间开销是衡量其好坏的最重要的标志,高效率的内排序算法是具有尽可能少的关键字比较次数和尽可能少的记录移动次数。
- 空间复杂度;辅助存储空间是除了存放待排序所占用的存储空间之外,执行算法所需要的其他存储空间,当排序算法使用的其他内存空间要与排序数据元素个数n无关时,其空间复杂度为)O(1),大多数排序算法的空间复杂度为O(1),也有一些时间复杂度性能好的排序算法,其空间复杂度为O(n)。
- 稳定性:即对任意一组数据元素序列,使用某种排序算法对他进行按照关键字的排序,若相同关键字的前后位置关系在排序前后保持一致,则称此排序是稳定的。稳定的排序算法是应用问题所希望的,因此,排序算法的稳定性是衡量算法好坏的一个重要指标。
四:主要学习的排序算法
五:各种排序算法的性能比较
排序算法 | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
直接插入排序 | O(n2) | O(n)、 | O(n2) | O(1) | 稳定 |
希尔排序 | O(nlogn) | O(n) | O(n2) | O(1) | 不稳定 |
简单选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
冒泡排序 | O(n2) | O(n) | O(n2) | O(1) | 稳定 |
快速排序 | O(nlogn) | O(nlogn) | O(n2) | O(logn) | 不稳定 |
归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 |