热门推荐
【算法】【排序算法】【01】冒泡、选择、堆
2025-01-02 13:37


(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]进行下滤

    以上就是本篇文章【【算法】【排序算法】【01】冒泡、选择、堆】的全部内容了,欢迎阅览 ! 文章地址:https://sicmodule.kub2b.com/quote/17995.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站https://sicmodule.kub2b.com/mobile/,查看更多   
发表评论
0评