八大排序

八 大 排 序

 

  1. 直接插入排序:

  类似扑克牌游戏,每次插入时,都为其寻找一个合适的位置,越有序越快,稳定

   平均时间复杂度:o(n*n)

   最好时间复杂度:o(n)

   空间复杂度:o(1)

 2.希尔排序

对大量的数据进行分组,减少时间复杂度。有一个增量序列,

最后一个必须是1。

跳跃式的排序,所以并不稳定

时间复杂度:o(n^1.3)~o(n^1.5)

空间复杂度:o(1)

第一次分组:

第二次分组:

 

 

第三次分组:

 

 

 

 

 3.冒泡排序:

两两进行比较,每次将最大的沉底,稳定

时间复杂度:o(n*n)

空间复杂度:o(1)

 

 

 

 

4.快速排序

 第一次选择数据最前面的作为基准,基准位置为low,最后一个位置为high,从high位置找比基准小的数据,找不到就high--,直到找到比基准小的数据,把该数据放在现在基准位置,从low位置开始找比基准大的数据,找不到就low++,找到就把该数据放在high位置,如此重复,直到low与high指向同一位置,该位置就是基准的位置,然后如果基准左右的数据个数大于1,则再分别对其左右进行上述步骤,直到没有数据再需要排序。不稳定,越有序越慢,最坏时间复杂度:o(n*n)(选择排序)

时间复杂度:o(n*log2n)

空间复杂度:o(log2n)

递归实现:

 

 

 

非递归实现:

5.选择排序

 

每次选择当前最小的数据放在当前的最前面,不稳定

时间复杂度:o(n*n)

空间复杂度:o(1)

 

 

6.堆排序

首先建立大根堆(父大于子)然后再将当前的根与当前的最后一个数字交换。再进行调整,使该树依然是大根堆。直到所有的数字比较完成。

建立大根堆的时间复杂度:o(n*log2N)

堆排序的时间复杂度:o(n*log2N)

空间复杂度O(1)

 

7.归并排序

一个数字默认有序

然后让其两两有序,再四四有序,再八八有序,直至所有数字都有序,稳定

时间复杂度:o(n*log2N)

空间复杂度:o(n)

 

8.基数排序(桶排序)

多关键字(出去的时候类似队列)

先排权重小的(个位),再排权重大的(百位)。依次类推,直至排完。

 

d趟数

r桶个数

n数字个数

时间复杂度:O(d*n)

空间复杂度O(n)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值