各种排序算法的稳定性~~~

一.稳定性

稳定性:  比如  2 3 2 4 4 
              排序后     2 2 3 4 4
              就是排序之后我们如何才能保证两个2前后的关系,在原始序列中是不变的,这个就是稳定性

如果不会打乱,就是具有稳定性 反之就是不稳定的

冒泡排序: 

时间复杂度:n平方

 不稳定,但是可以做到稳定性  ,例如下面的列子

让相同的值,第二继续往下沉就可以了,这样就实现冒泡法排序的稳定性      

插入排序:

时间复杂度:n平方

不稳定  ,但是可以做到稳定性   如下图

实现思路:往前插入,遇到相同的值,就停

选择排序:

时间复杂度:n平方

不稳定    也做不到稳定   ,分析如下图

   归并排序:

时间复杂度:nlogn

不稳定   但是可以做到稳定性

快速排序:

时间复杂度:nlogn

不稳定    不能做到稳定性

因为partition的过程 无法做到稳定性

 堆排序:

时间复杂度:nlogn

不稳定:无法做到稳定性

完全二叉树

稳定性的意义:

就是原始的信息,没有被打乱

工程中的综合排序算法:

如果是基础类型  比如  int  double char  float shot 等,用快速排序   基础类型不用区分  顺序   比如 3 3 3 

如果是自己定义的  比如  people 等里面有多个属性  就用归并排序   身高排序   后成绩排序   所以有差别

如果数据量较小,则用插入排序,不用前两种  因为插入排序  常数项很低   数据量小于60直接用插入排序

面试常问:

为什么在综合排序中,会选择,复杂度很高的进行,排序 ?

因为常数项低

为什么基础类型用快排    自定义类型  用归并   ?

从稳定性的角度考虑的

有关排序问题的补充:

第三道题:奇数放左边,偶数放右边 还要求原始次序不变      时间复杂度为o(n)   空间复杂度为o(1)

不能做到   .......

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的小巍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值