13:堆结构heap (priority queue)重要结构:上移过程heapInsert()
13:堆结构heap (priority queue)重要结构
之
上移过程heapInsert()
1、堆结构就是用数组实现的完全二叉树结构;
2、完全二叉树中如果每棵树(包括子数) 的最大值都在顶部 是 大根堆;
3、完全二叉树中如果每棵树(包括子数) 的最小值都在顶部 是 小根堆;
4、堆结构的heapInsert 与 heapify操作;
5、堆结构的增大和减少;
6、优先级队列结构,就是堆结构;
完全二叉树的概念:
如果一棵树是满的,是完全二叉树;
如果一棵树不是满的,处在变慢的路上,从左往右依次变满的数;
都是完全二叉树。
落地:使用连续数组来表示对应的完全二叉树,下标的表示。
i的父节点(i-1)/2
任何i位置
左孩子的位置2*i+1 右孩子的位置2*i+2
堆:1、是完全二叉树
2、是大根堆还是小根堆
所以在数组中每次加入一个数,这个数会跟它的父进行比较,按照大小根堆的要求进行是否交换heapInsert()。
 1 // 新加进来的数,现在停在了index位置,请依次往上移动,
 2         // 移动到0位置,或者干不掉自己的父亲了,停!
 3         private void heapInsert(int[] arr, int index) {
 4             // [index] [index-1]/2
 5             // index == 0
 6             while (arr[index] > arr[(index - 1) / 2]) {
 7                 swap(arr, index, (index - 1) / 2);
 8                 index = (index - 1) / 2;
 9             }
10         }