理解对结构(左神视频)
1、用户给了一个黑箱,要求每次都往黑箱里面加一个数字,同时还需要弹出其中的最大值,即heapinsert 和heapify的过程。
2.heapinsert:
就是实现大根堆的过程,每次保证:在任何一个子树中,最大值都是这个子树的头。
3、heapify:
就是再把大根堆的第一个数字和和最后一个数字交换以后,把数组的大小减一,则最后一个数就是最大值。
剩余的n-1个数,从上往下找左右子数中比自己大的数,交换,使得最终依然是个大根堆,把大根堆第一个与最后一个数交换,数组大小减一,
往复上述过程。
python:实现时需要注意(0-1)//2==-1,不同于C和Java; 2、需要注意python没有自减操作。
代码
import random
#功能是:构建大根堆
#大根堆概念:在任何一个子树中,最大值都是这个子树的头
def heapInsert(arr,index):
#python中(0-1)//2==-1,所以0位置要排除在外,区别于java和C语言
while index>0 and (arr[