ca1403,快车下载器,异界之中华古武
利用最大堆实现升序, 最小堆实现降序. 因为最大堆的根父节点一定是最大的, 让它和队尾元素互换, 然后在从堆中排除最后一个元素, 并复原最大堆. 循环 n-1次.
关键在于构建最大堆
最大堆的构建过程
function heapsort(ary) { // 实现最大堆 // start: 父节点, end: 循环深度 function maxheap(ary, start, end) { let parent = start, // 父节点 son = parent*2 + 1, // 左子节点 temp = null; // 规定循序最大深度 while(son<=end) { // 如果存在右子节点, 并且判断右节点是否大于左节点 if(son+1<=end && ary[son] < ary[son+1]) son++; if(ary[son] > ary[parent]) { temp = ary[son]; ary[son] = ary[parent]; ary[parent] = temp; parent = son; son = parent*2 +1; }else { return; } } } // 构建最大堆 ary.length/2-1: 表示最后一个父节点 for(let i = ary.length/2-1; i>=0; i--) { maxheap(ary, i, ary.length-1); } // 排序 for(let i = ary.length-1; i>0; i--) { let temp = ary[0]; ary[0] = ary[i]; ary[i]= temp; // 剔除最后一个元素,并复原最大堆 maxheap(ary, 0, i-1); } return ary; }
效果演示:
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
怎么理解wx.navigateTo的events参数使用详情
微信jssdk踩坑之签名错误invalid signature
网友评论