排序总结



排序总结:
(一)稳定性:
(1)定义:
稳定性是考察相等的排序码的不同元素在排序前后的位置是否发生颠倒;
(2)不稳定的排序:
常见的4中不稳定的排序为:Shell排序,简单选择排序,快速排序,堆排序;

(3)稳定的排序适用于:
稳定的排序是让原来排在前面的元素在排序后依然排在相同排序码的其他元素的前面,体现了“先来者优先”的原则。

(4)稳定的排序与不稳定的排序比较:

大多数稳定的排序是以时间后者空间作为代价的:譬如插入排序,冒泡排序的空间复杂度较低,但是时间复杂度较高;
归并排序的时间复杂度较低,但是空间复杂度较高;
不稳定的排序如快速排序,堆排序,希尔排序的时间和空间复杂度都较低;

(二)插入排序:
(1)直接插入排序:
(2)折半插入排序:
(3)希尔排序:
http://blog.csdn.net/legend050709/article/details/39235027

(三)交换排序:
(1)冒泡排序:
http://blog.csdn.net/legend050709/article/details/19976161
(2)快速排序:

(四)选择排序:
(1)简单选择排序:
(2)堆排序;


(五)归并排序:

(1)二路归并排序:

(六)基数排序:

--------------

(七)选择合适的排序:

(0)n较小时,适合简单排序:如直接插入,冒泡排序,简答选择排序,折半插入排序;
n较大时,适合时间复杂度低的排序:如希尔排序,堆排序,快速排序,归并排序;

(1)元素的本身的信息量越大,则每个元素所占用的空间就越多,移动每个元素花费的时间就越多,所以需要移动次数少的排序。
简单选择排序的移动次数是O(n);因为交换是在第一次循环里面;
而冒泡排序,直接插入排序的移动次数是O(n^2),因为移动是在第二次循环里面。

(2)当排序的元素个数n较大时,且排序的分布随机,且对稳定性无要求,则使用快速排序。
(注意:如果初始数组基本有序,则不要用快速排序,因为基本有序时,快速排序的时间复杂度接近于O(n^2) )

(3)当排序的元素个数n较大时,内存空间允许,且要求排序稳定,则使用归并排序或者基数排序;

(4)当排序的元素个数n较大时,且初始元素可能出现正序或者逆序的情况,且对稳定性无要求,则采用堆排序或者归并排序;

(5)当排序的元素个数n较小时,且初始的序列基本有序或者无序,且要求是稳定的排序,则使用直接插入排序。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值