排序方法的选用应该根据具体情况而定,一般应该从以下几个方面综合考虑:⑴时间复杂性;⑵空间复杂性;⑶稳定性;⑷算法简单性;⑸待排序记录个数n的大小;⑹记录本身信息量的大小;⑺关键码的分布情况。
1. 时间复杂性
表8-1各种排序方法性能的比较
前面所述各种内排序的时间和空间性能的比较结果如图所示。
2. 空间复杂性
从空间复杂性看,所有排序方法分为三类:
归并排序单独属于一类,其空间复杂性为O(n);
快速排序单独属于一类,其空涓丛有晕?em>O(log2n) ~ O(n);
其它排序方法归为一类,其空间复杂性为O(1)。
3. 稳定性
所有排序方法可分为两类,一类是稳定的,包括直接插入排序、起泡排序、简单选择排序和归并排序;
另一类是不稳定的,包括希尔排序、快速排序和堆排序。
4. 算法简单性
从算法简单性看,一类是简单算法,包括直接插入排序、简单选择排序和起泡排序;
另一类是改进算法,包括希尔排序、堆排序、快速排序和归并排序,这些算法都很复杂。
5. 待排序的记录个数n的大小
从待排序的记录个数n的大小看,n越小,采用简单排序方法越合适。
6. 记录本身信息量的大小
表8-2三种简单排序算法中记录的移动次数的比较
记录本身信息量越大,移动记录所花费的时间就越多,所以对记录的移动次数较多的算法不利。
排序方法
最好情况
最坏情况
平均情况
直接插入排序
O(n)
O(n2)
O(n2)
起泡排序
0
O(n2)
O(n2)
简单选择排序
0
O(n)
O(n)
7. 关键码的分布情况
当待排序记录序列为正序时,直接插入排序和起泡排序能达到O(n)的时间复杂度;
对于快速排序而言,这是最坏的情况,此时的时间性能蜕化为O(n2);
简单选择排序、堆排序和归并排序的时间性能不随记录序列中关键码的分布而改变。