Tedunix 发表于 2009-11-25 14:34

排序方法总结

关键字: c


    结论:
   排序方法 平均时间 最坏时间 辅助存储
   简单排序 O(n2)O(n2)O(1)
   快速排序 O(nlogn) O(n2)         O(logn)
   堆排序 O(nlogn) O(nlogn) O(1)
   归并排序 O(nlogn) O(nlogn) O(n)
   基数排序 O(d(n+rd)) O(d(n+rd)) O(rd)
另外:直接插入排序、冒泡排序为简单排序,希尔排序(不稳定)
一、时间性能
按平均的时间性能来分,有三类排序方法:
时间复杂度为O(nlogn)的方法有:快速排序、堆排序和归并排序,其中以快速排序为最好;
时间复杂度为O(n2)的有:直接插入排序、起泡排序和简单选择排序,其中以直接插入为
最好,特别是对那些对关键字近似有序的记录序列尤为如此;
时间复杂度为O(n)的排序方法只有,基数排序。
当待排记录序列按关键字顺序有序时,直接插入排序和起泡排序能达到O(n)的时间复杂
度;而对于快速排序而言,这是最不好的情况,此时的时间性能蜕化为O(n2),因此是应
该尽量避免的情况。
简单选择排序、堆排序和归并排序的时间性能不随记录序列中关键字的分布而改变。

二、空间性能
指的是排序过程中所需的辅助空间大小。
1. 所有的简单排序方法(包括:直接插入、起泡和简单选择)和堆排序的空间复杂度为O(1);
2. 快速排序为O(logn),为栈所需的辅助空间;
3. 归并排序所需辅助空间最多,其空间复杂度为O(n);
4.链式基数排序需附设队列首尾指针,则空间复杂度为O(rd)。
三、排序方法的稳定性能
1. 稳定的排序方法指的是,对于两个关键字相等的记录,它们在序列中的相对位置,在
排序之前和经过排序之后,没有改变。
2. 当对多关键字的记录序列进行LSD方法排序时,必须采用稳定的排序方法。
3. 对于不稳定的排序方法,只要能举出一个实例说明即可。
4. 希尔排序、快速排序和堆排序是不稳定的排序方法
四、应用
归并排序很难用于主存排序,主要问题在于:合并两个排序的表需要线性附加内存,在整个算法中还要花费将数据拷贝到临时数组再拷贝回来这样一些附加的工作,其结果严重放慢了排序的速度。
对于重要的内部排序应用而言,应选择快速排序。
快排和归并排序都是分治的递归算法。
对于很小的数组(N
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/98073/showart_2103620.html
页: [1]
查看完整版本: 排序方法总结