NB二人组----堆排序

堆排序前传--树与二叉树简介

特殊且常用的树--二叉树 

 

两种特殊的二叉树

 

二叉树的存储方式

 

二叉树小结

 

堆排序

 

堆这个玩意.......

 

堆排序过程:

 

堆排序的算法程序(程序需配合着下图理解):

 

def sift(data,low,high):   # 调整函数
    i = low  # 树的根  也就是父亲 ,这里只领导
    j = 2 * i + 1 # 根的左孩子 也就是 儿子 ,这里指小领导
    tmp = data[i]  # 把根 取出来 做调整 , 在这里 领导
    while j <= high:  # high其实就是 根的右儿子(也就是最后一个儿子),如果 j= high 则表示没有右儿子,也就是说这里必须有儿子在
        if j < high and data[j] < data[j + 1]: # j < high 代表有右儿子 , data[j] < data[j + 1] 说明右儿子比左儿子大
            j += 1 # 这个 j 则变为右儿子 ,也就是 若有比 j 大的值,则 j 就变为比他大的那个值
        if tmp < data[j]: # 如果领导不能干
            data[i] = data[j] # 则小领导上位
            i = j # 小领导变为大领导
            j = 2 * i + 1 # 小小领导变为小领导
        else: # 如果领导能干
            break # 那就待着吧
        data[i] = tmp # 到最后 i 这里肯定会有空位 ,所以无论 tem 是谁 都要占住这个空位

猜你喜欢

转载自www.cnblogs.com/zhuifeng-mayi/p/9214726.html
今日推荐