排序算法总结

1、排序趟数与序列初态无关的算法是:选择排序(简单选择排序,堆排序)插入排序(直接插入排序、折半插入排序、希尔排序)、归并排序、基数排序。
---->有关无关指的是是不是一趟可以确定最好的顺序。
一趟指的是对数列中的每个元素都进行过处理。
归并排序需要进行logk[n]趟排序 (向上取整)
插入排序、选择排序趟数都是固定的 n-1.
基数排序,每趟排序都要进行分配手机固定为d
对于插入排序来说,即使序列有序,也要依次从第二个元素开始,向前找它的插入位置。选择排序也是进行n-1趟,每趟选出一个最大最小的元素。
2、排序趟数与序列初态有关的算法是:交换排序(冒泡排序、快速排序)
冒泡排序趟数与数据有关,优化冒泡排序的最优复杂度为O(n),其主要优化就是记录了前一趟是否冒泡,如果没有产生冒泡就说明数组已经有序,直接return。如果产生了冒泡,才继续执行。
快速排序的排序趟数就是它的递归深度。当快排的数据是有序时候,会退化为冒泡,所以快排趟数也与初始序列顺序有关了
3、比较次数与序列初态无关的算法是:归并排序、简单选择排序、基数排序
简单选择排序的比较次数始终为n(n-1)/2
4、比较次数与序列初态有关的算法是:插入排序(直接插入、希尔、折半)、交换排序(快速排序、冒泡排序)、堆排序
堆排序:比如元素下沉的操作,虽然一个元素是从底部拉上来的,但这不代表这个元素一定会接着沉到底部,如果沉到中间就停止下沉的话,比较次数就少了。而这个过程的比较次数自然和下沉的深度是相关的。
希尔排序:希尔排序是对直接插入排序的改进,每一趟希尔的内部使用的就是插入排直接序。
直接插入排序:随着数据变成正序时,执行效率最好,每次插入都不用移动前面的元素,时间复杂度为O(N)。当数据是反序时,执行效率最差,此时时间复杂度为O(N*N). 类比到希尔排序中,希尔排序本身就是属于插入排序。当然会随着有序而少比较几次。
(这里说的比较次数是精确的次数,区别于时间复杂度的概念,时间复杂度只是描述了数量级)
5、选择(堆排序,简单选择排序)和交换排序(冒泡、快速排序)每趟总会有一个元素被放置在最终(正确)位置上。
6、一般情况下,查找效率最低的是 堆排序
7、不需要进行关键字的比较是 基排序,他比较的是位数不是关键字
5、基数排序不能对float和double类型排序

给出一个序列判断是哪个排序的结果:
1、先把最终排序的顺序写出来
2、判断有多少元素在正确的位置上
3、 判断类型
插入排序 第i趟后前i+1个元素有序
直接插入排序,判断一个序列的比较次数直接看在他前面有多少个比他大的。有多少比它大的就比较多少次;越接近正序,比较次数越少;反之逆序比较次数多。
快排:第i趟完成时,会有i个以上的数出现在它最终要出现的位置,即左边的数都比他小,右边的数都比他大。边界点也符合这个特性。
2路归并算法经过第二趟后应该每四个元素有序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值