排序算法大集合

https://blog.csdn.net/weixin_41317985/article/details/79461929

1.比较排序

A.冒泡排序

  • 最佳情况:T(n) = O(n)
  • 最差情况:T(n) = O(n2)
  • 平均情况:T(n) = O(n2)

B.选择排序

  • 最佳情况:T(n) = O(n2)
  • 最差情况:T(n) = O(n2)
  • 平均情况:T(n) = O(n2)

C.插入排序

  • 最佳情况:输入数组按升序排列。T(n) = O(n)
  • 最坏情况:输入数组按降序排列。T(n) = O(n2)
  • 平均情况:T(n) = O(n2)

D.希尔排序

  • 最佳情况:T(n) = O(nlog2 n)
  • 最坏情况:T(n) = O(nlog2 n)
  • 平均情况:T(n) =O(nlog n)

E.归并排序

  • 最佳情况:T(n) = O(n)
  • 最差情况:T(n) = O(nlogn)
  • 平均情况:T(n) = O(nlogn)

F.快速排序

  • 最佳情况:T(n) = O(nlogn)
  • 最差情况:T(n) = O(n2)
  • 平均情况:T(n) = O(nlogn)

G.堆排序

  • 最佳情况:T(n) = O(nlogn)
  • 最差情况:T(n) = O(nlogn)
  • 平均情况:T(n) = O(nlogn)

可以看出比较排序在大数据量的情况排名:

时间排序上来看: 1.归并排序  2.堆排序 3.快速排序

但归并排序需要开辟额外的空间去储存正在调整排序的数组

如果对于空间和时间都有要求,建议使用快速和堆排序

归并排序思路(递归):

[2,1,4,3,9,6,5,8]
第一步分割数组

[2,1,4,3] [9,6,5,8]
[2,1][4,3] [9,6][5,8]=>直到每个数组都不能再分割
第二步排序最底部子数组开始排序然后合并数组,顺序如下
[2,1]                    =>[1,2]
[2,1][4,3]                =>[1,2,3,4]
[9,6]                    =>[6,9]
[5,8]                    =>[5,8]
[9,6][5,8]                =>[5,6,8,9]
[2,1][4,3] [9,6][5,8]    =>[1,2,3,4,5,6,8,9]

2.非比较排序

对于大量的数据速度并不一定比比较排序快

A.计数排序

  • 最佳情况:T(n) = O(n+k)
  • 最差情况:T(n) = O(n+k)
  • 平均情况:T(n) = O(n+k)

要求:必须是整数,且给出接受数组为排序数组的最小到最大的范围如,排序数组是1-9,则参考数组必须要1-9

速度快于任何比较排序,但面临数量大的数组,会占有大量内存和时间

B.桶排序

  • 最佳情况:T(n) = O(n+k)
  • 最差情况:T(n) = O(n+k)
  • 平均情况:T(n) = O(n2) 
  • 说明:桶排序简单来说是计数排序的参考数组的优化,缩小参考数组聚集成为桶,然后对桶再排序,再合并桶数组为结果

  • 如[1,2,3,4,5,6,7,8,9] =>[1,2,3]+ [4,5,6]+[7,8,9]

C.基数排序

  • 最佳情况:T(n) = O(n * k)
  • 最差情况:T(n) = O(n * k)
  • 平均情况:T(n) = O(n * k)
  • 说明:依据于数字的位数上的数字大小放到桶里,再拿出来合并为新排序数组,从地位到高位
  • 如: 下图所示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值