推广 热搜: page  小红  红书  数据  论文  考试  数据分析  关键词  哪些  搜索 

【算法】【排序算法】【01】冒泡、选择、堆

   日期:2025-01-02     移动:https://sicmodule.kub2b.com/mobile/quote/17995.html


(1)前期准备参考:代码环境准备

(2)空间复杂度 & 原地算法

 


 
  • end的定义 :[0,end]范围内都是无序的;当前安排 [0,end]范围内最大元素放在end位置
  • 在完成当前轮排序前:[0,end]是无序的, (end,length-1]是有序的
    完成当前轮排序后:[0,end)是无序的, [end,length-1]是有序的
 

这种优化本质上并没有减少冒泡排序的交换次数,只是在达到有序后,提前终止了循环,减少了循环的轮数

 

这种优化本质上也没有减少冒泡排序的交换次数,只是实现了end 跨越,从而减少了比较次数

  • 最坏:O(n2) 完全逆序 从大到小
  • 最好:O(n) 完全正序(优化后的冒泡排序,一轮后直接结束程序;如果是经典的,还需要比较,仍然为O(n2)
  • 平均:O(n2)

  • 空间复杂度:O(1)
  • 冒泡排序属于 In-place
  • 冒泡排序属于稳定的排序算法


冒泡排序的稳定性取决于 发生交换的判决条件

 
  • 如果是> 交换,那么两个相等的元素就不会进行交换,在后面的会先放到end,因此是稳定的
  • 如果是>= 交换,那么两个相等的元素会发生交换,破坏了稳定性
  • [0,end]是无序区,每轮在无序区找到最大元素的索引,和end位置的元素进行交换
  • 优势:每一轮end 只发生一次交换操作
 
 

  • 最坏:O(n2)
  • 最好:O(n2)
  • 平均:O(n2)


空间复杂度:O(1)
冒泡排序属于 In-place
冒泡排序属于稳定的排序算法


冒泡排序的稳定性取决于 发生交换的判决条件

 

如果是>,那么假设有两个最大元素,会将第一个元素放到end位置,因此是不稳定的
如果是>= ,那么假设有两个最大元素,会将最后面一个元素放到end位置,因此是稳定的

main方法测试验证

 
 

这里选择排序用的是>=判断条件,可以看出是稳定的
选择排序因为交换次数远小于冒泡,因此效率高很多

图解可参考
https://blog.csdn.net/weixin_43734095/article/details/105108135

认识二叉堆 Heap结构

 
 

堆排序:先对无序序列原地建堆,有了堆以后,可以直接选出最大值
将最大值和elements[size-1]互换,再对elements[0]进行下滤

本文地址:https://sicmodule.kub2b.com/quote/17995.html     企库往 https://sicmodule.kub2b.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号