【转】几种常见的排序算法之比较

对常见的这几种排序算法的练习,对我们的思路的规范化是很好的。学习前人是如何优化算法节约时间和空间的。

   我们所练习的排序主要是内部排序,所谓内部排序,就是整个排序过程都在内存进行的排序,称为内部排序;反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序。内排序适用于记录个数不是很多的小文件,而外排序则适用于记录个数太多,不能一次性放人内存的大文件。

   对排序算法的分析可以从以下几个方面进行:排序算法的稳定性、平均时间、最坏情况、辅助存储空间。

   从稳定性来说,稳定的排序算法有:直接插入排序、冒泡排序、归并排序,其它排序算法都是不稳定的。

                               平均时间           最好情况          最坏情况        辅助空间

   直接插入排序            O(n*n)            O(n)                O(n*n)          O(1)

   希尔排序排序            O(n1+£)          O(n)                O(n*n)          O(1)   

                        £是介于0和1之间的常数

   冒泡排序                  O(n*n)            O(n)                O(n*n)          O(1)   

   快速排序                  O(nlogn)          O(nlogn)          O(n*n)         O(nlogn)

   直接选择排序             O(n*n)            O(n*n)            O(n*n)          O(1)

   堆排序                     O(nlogn)          O(nlogn)          O(nlogn)       O(1)

   归并排序                  O(nlogn)          O(nlogn)          O(nlogn)       O(1)

                  

各种排序方法比较

     简单排序中直接插入最好(稳定、易于实现),快速排序最快,当文件为正序时,直接插入和冒泡均最佳。

    (1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
    (2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
    (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。若要求排序稳定,则可选用归并排序。但本章介绍的从单个记录起进行两两归并的排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子文件,然后再两两归并之。因为直接插入排序是稳定的,所以改进后的归并排序仍是稳定的。

 

写出下列算法的时间复杂度。
(1)冒泡排序;
(2)选择排序;
(3)插入排序;
(4)快速排序;
(5)堆排序;
(6)归并排序;
答案:
冒泡排序算法时间复杂度是O(n^2)。
选择排序算法复杂度是O(n^2)。
插入排序算法时间复杂度是O(n^2)
快速排序快速排序是不稳定的。最理想情况算法时间复杂度O(nlog2n),最坏O(n^2)。
堆排序算法时间复杂度O(nlogn)。
归并排序的时间复杂度是O(nlog2n)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值