常用的排序算法

目录

一、冒泡排序

冒泡排序的升级—— 鸡尾酒排序法

二、快速排序

三、堆排序

四、计数排序​

计数排序的局限性

五、桶排序

总结:


 

一、冒泡排序

(以从小到大排序顺序为例)---- 时间复杂度:O(n²)

  • 相邻两元素两两比较,当左边元素大于右边,则交换位置,否则位置不变,然后右边的元素接着跟下一个元素比较
  • 最多遍历(元素数量 - 1)轮,最后一轮没有要交换的元素

冒泡排序的升级—— 鸡尾酒排序法

  • 鸡尾酒排序比较和交换的过程是双向
  • 代码的外层大循环控制着所有排序回合,大循环包含了两个小循环,第一个小循环从左到右比较和交换元素,第二个小循环从右到左比较和交换元素
  • 优点:特点情况下,减少排序回合数
  • 缺点:代码长

二、快速排序

(以从小到大的排序顺序为例)

  • 在每一轮挑选一个基准元素,并让其他比它大的元素放在右边,小的放在左边,把数列拆解成两部分,每一部分又分别被拆解成两部分,直到不能拆解为止。
  • 可分为单边循环法,双边循环法
  • 基准元素的选择:一般都是选择数列的第一个元素
  • 平均时间复杂度:O(nlogn),最坏时间复杂度:O(n²)

三、堆排序

分为:大顶推、小顶堆

堆排序算法的步骤:

  1. 把无序数组构建出二叉堆,需要从小到大排序,则需要构建成最大堆,需要从大到小排序则需要构建成最小堆。
  2. 循环删除堆顶元素,替换到二叉堆的末尾,调整堆产生新的堆顶。(下沉调整)

四、计数排序

计数排序的局限性

  • 当数列最大和最小值差距过大时,并不适合用计数排序
  • 当数列元素不是整数时,也不适合用计数排序 

五、桶排序

需要创建多个桶协助排序,每个桶代表一个区间(里面可以代表一个或多个元素)

  • 桶数量 = 元素数量
  • 最后一个桶只包含最大值
  • 区间跨度 =(最大值 - 最小值)/ 桶的数量 - 1

以下列元素排序为例  3.3 、1.9 、 0.8 、4.5 、0.5

(显然只有第一个桶需要排序)

遍历完所有的桶,输出所有元素:0.5、0.8、1.9、3.3、4.5

总结:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值