Reference
图解大顶堆的构建、排序过程 - 鹿呦呦 - 博客园 (cnblogs.com)
正文
突然发现没有学过堆这个结构呀
无论是王道还是王卓的课里面都没有
昨天考到了大根堆,完全不记得了
这里再学一下
这里使用大顶堆举例子:
上律: 找到最后一个非叶子节点将子节点与其对比,将更大的放到父节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
function buildBigHeap(int[] arr,int len) { for (i = floor(len/2) - 1; i >= 0; i--) { if (2 * i + 1 < len && arr[i] < arr[2 * i + 1]) { swap(arr, i, 2 * i + 1); if ((2 * (2 * i + 1) + 1 < len && arr[2 * i + 1] < arr[2 * (2 * i + 1) + 1]) || (2 * (2 * i + 1) + 2 < len && arr[2 * i + 1] < arr[2 * (2 * i + 1) + 2])) { buildBigHeap(arr, len); } } if (2 * i + 2 < len && arr[i] < arr[2 * i + 2]) { swap(arr, i, 2 * i + 2); if ((2 * (2 * i + 2) + 1 < len && arr[2 * i + 2] < arr[2 * (2 * i + 2) + 1]) || (2 * (2 * i + 2) + 2 < len && arr[2 * i + 2] < arr[2 * (2 * i + 2) + 2])) { buildBigHeap(arr, len); } } } }
|