星球狂想战队|是准备家里蹲吗,还不会十大排序( 二 )
原序列:4->3->2->5->1第一趟过程1:(2)->3->(4)->5->1第一趟过程2:2->(3)->4->(5)->1第一趟过程3:(1)->3->(2)->5->(4)
文章图片
voidsort(){//修剪枝叶的优化方法//基于原理:和冒泡排序完全一致 。 for(inti=0;i<array.length;i++){//用于标示最小值下标intmin=i;//循环方式找到最小值for(intj=i+1;j<array.length;j++){if(array[j]<array[min])min=j;}swap(array[min],array[i]);}}和冒泡排序简单程度同级的排序 , 基于这样一个概念:每次找到在维护的数组内部最小个的值 , 并将它放到对应范围的第一位 。
【星球狂想战队|是准备家里蹲吗,还不会十大排序】实现方案同样还是暴力的双重循环进行一个求解过程 。
文章图片
staticvoidsort(){intlen=arr.length;//构建大顶堆for(inti=(arr.length-1)/2;i>=0;i--)heapSort(i,arr.length-1);for(inti=arr.length-1;i>0;i--){//交换0 , 最后号位 , 也就把最大值放到了最后swap(0,i);//len减1 , 保证了最后一位数并不会处理//也就完成了倒数的大数的排序len--;heapSort(0,len);}}staticvoidheapSort(inti,intlen){if(i>len)return;intmaxIdx=i;intfirPosition=i*2+1;intsecPosition=i*2+2;//左右大小比较 , 左边为大if(firPosition<len&&arr[firPosition]>arr[maxIdx])maxIdx=firPosition;if(secPosition<len&&arr[secPosition]>arr[maxIdx])maxIdx=secPosition;if(maxIdx!=i){swap(maxIdx,i);heapSort(maxIdx,len);}}堆排序 , 其实你也可以理解为一种树形排序 , 虽然没有把这个数组转化成树 , 但是基于的原理就是一种树形的概念 。
(1)大顶堆(数组升序):arr[i]>=arr[2i+1]&&arr[i]>=arr[2i+2]
(2)小顶堆:arr[i]<=arr[2i+1]&&arr[i]<=arr[2i+2]
总结出来就是树形 , 而遍历方式就是一种层次性遍历比较:
原序列:4->3->2->5->1构建大顶堆 , 树形对应数组的一份:42无子树45maxId变化5/不处理 。 //处理4/32===>52===>42===>42/处理3/处理4//51313131我们发现一旦出现值的变化 , 那就需要对子树进行最初相应的改变 , 但为什么这一步只是说完成树的构建呢?因为她并不会去比较 , 左右子树的大小 , 他唯一能保证的就是一个节点的值一定大于左右子树 , 并且确定下跟节点的值 。 所以引出了我们的第二步就是真正的排序 。
构建完大顶堆后的序列:5->4->2->3->1进行完交换后:5交换1/0和4号位/回到上述的树形建立42===>42===>//只是去除了4号位3135
文章图片
- Odaily星球日报|DeFi艺术周报:加密艺术家收入超过100万美金
- 碰碰战队|荣耀X10 Max今日10:08震撼开售,超能5G大屏
- Odaily星球日报|2020最热DeFi项目大盘点:DEX、去中心化借贷带你一次性全读懂
- 路人战队|自运营120多家shopee店,聊聊,东南亚跨境电商shopee店群是什么
- Tech星球|贾跃亭、罗永浩、冯鑫:殊途不同归
- 南极▲【揭秘】60年前,美国陆战队与外星人的遭遇战
- 通天战队|充电慢的痛点,下一个风口浪尖?市场迫切需要解决手机耗电快
- 通天战队|为啥不将根目录文件译成中文?,华为、小米等安卓手机
- 星球狂想战队|x360 15笔记本评测,轻薄变形本下的“金属暴力美学”惠普Spectre
- 家族战队|Intel突然断供中国另一龙头企业,突发:继华为之后