排序的稳定性:由于排序不仅是针对主关键字,对于次关键字,因为待排序的记录序列中可能存在两个或两个以上的关键字相等的记录,排序结果可能会存在不唯一的情况。假设ki=kj,且在排序前的序列中ri领先于rj。如果排序之后ri仍领先于rj,则称所用的排序方法是稳定的,反之,若可能使得排序后的序列中rj领先于ri,则称所用的排序方法不稳定。
内排序:在排序的整个过程中,待排序的所有记录全部被放置在内存中。
外排序:由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行。
时间性能:在内排序中,主要进行比较和移动,高效的内排序算法应该具有尽可能少的关键字比较次数和尽可能少的记录移动次数。
辅助空间:辅助存储空间是除了存放待排序所占用的存储空间之外,执行算法所需要的其他存储空间。
内排序:插入排序(直接插入排序—>希尔排序)、交换排序(冒泡排序—>快速排序)、选择排序(简单选择排序—>堆排序)和归并排序。
简单排序算法:冒泡排序、简单选择排序和直接插入排序。
改进排序算法:希尔排序、堆排序、归并排序和快速排序。
排序方法 | 平均情况 | 最好情况 | 最差情况 | 辅助空间 | 稳定性 |
冒泡排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
简单选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | 稳定 |
直接插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 |
希尔排序 | O(nlogn)~O(n^2) | O(n^1.5) | O(n^2) | O(1) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 |
快速排序 | O(nlogn) | O(nlogn) | O(n^2) | O(logn)~O(n) | 不稳定 |
考虑时间复杂度:
最好情况下,冒泡和直接插入
最坏情况下,堆和归并
考虑空间复杂度:堆
考虑稳定性:归并
考虑待排序列的个数,个数越小,采用简单排序方法越合适,越大,采用改进排序方法越合适。