【算法基础(4)】堆排序(二)
创始人
2024-06-03 07:57:37
0
堆排序(二)

把数组从零开始连续的一段 = 完全二叉树 size

i 左 son 2*1+1

i 右 son 2*1+2

父 (i-1) / 2

堆是完全二叉树,分为大根堆和小根堆

在完全二叉树里,每一棵子数最大的值是头节点的值,就是大根堆

同理,在完全二叉树里,每一棵子数最小的值是头节点的值,就是小根堆

大根堆排序,插入的值 和 父节点比较,如果比父节点大,和它交换,直到最大,就停止,通过这样的调整,得到的一定是大根堆。这个过程,我们叫做 heapInsert

public static void heapInsert(int [] arr, int index) {while (arr[index] > arr[(index - 1) / 2]) {// 和父节点交换值  并且把当前下标移动到父节点swap(arr, index, (index - 1) / 2); index = (index - 1) / 2; }
}

从一堆数中找出最大值,移除它,保持还是大根堆,我们管这个过程叫做heapify

public static void heapify(int [] arr, int index, int heapSize) {int left = index * 2 + 1; // 左孩子的下标while (left < heapSize) { // 下方还有孩子 (左孩子越界,那么就没有右孩子了。)// 俩个孩子中,谁的值大,把下标给谁 (先找出孩子中最大的)int largest = left + 1 < heapSize && arr[left + 1] > arr[left] ? left + 1:left;// 父和孩子之间,谁的值大,把下标给谁 (较大的孩子和父节点找出最大的)largest = arr[largest] > arr[index] ? largest : index;if (largest == index) { // 如果当前节点就是最大的 跳出break;}swap(arr, largest, index); // 交换位置index = largest; // 继续比较left = index * 2 + 1; // 找左孩子继续 while}
}

题目:

已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过K,并且K相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。

假如K = 6 ,建立一个heapSize = 7 的小根堆 (这样小根堆的最小值一定是数组的最小值)

把最小的弹出,保持小根堆,新加入的数字做heapfiy,

继续上面的步骤,直到全部弹出。

public static void main(String[] args) {PriorityQueue heap = new PriorityQueue<>();heap.add(8);heap.add(4);heap.add(10);heap.add(3);while(!heap.isEmpty) {System.out.println(heap.poll());}
}

相关内容

热门资讯

凯文教育(002659.SZ)... 格隆汇7月4日丨凯文教育(002659.SZ)公布,公司子公司北京凯誉鑫德餐饮管理有限责任公司(简称...
6月份内蒙古粮食收购价格稳中趋... 转自:草原云记者从内蒙古自治区价格监测和认定中心获悉,6月份内蒙古玉米、大豆收购价格小幅上涨,小麦收...
会在下周亮相么?三星系统更新意... 财联社7月4日讯(编辑 史正丞)就在三星下周即将召开新品发布会之际,公司推进的系统更新,或能让外界得...
启辰到底是国产车还是合资车? 启辰到底是国产车还是合资车?严格来说这属于国产汽车,是合资车厂的“国产品牌
永利股份(300230.SZ)... 永利股份(300230.SZ)发布公告,公司下属全资子公司Source Wealth Limited...
五矿发展:7月4日召开董事会会... 五矿发展7月4日晚间发布公告称,公司第十届第五次董事会会议于2025年7月4日以通讯方式召开。会议审...
北大医药:子公司3000万元开... 格隆汇7月4日|北大医药公告,公司全资子公司新优势健康产业发展有限公司将使用自有资金开展证券投资业务...
“最悲观情境”,韩国仅剩15%... 韩国智库“韩半岛未来人口研究院”周三发布报告称,若当前超低生育趋势持续,韩国总人口到2125年或将锐...
晶科电子股份荣获“格隆汇金格奖... 格隆汇7月4日|格隆汇2025中期策略会7月4-5日在深圳举行。活动期间颁发年度“格隆汇金格奖”,在...
求神奇宝贝城都联盟目录 求神奇宝贝城都联盟目录这是所有的联盟级数目录