今天我們來談談堆

2022-07-02 06:51:12 字數 1617 閱讀 8853

堆是一種特殊的樹,他滿足一下兩點要求

最大堆和最小堆是二查堆的兩種形式,最大堆和最小堆很相似,所以本文只實現最大堆以及堆排序

在最大堆中,設根節點索引從1開始,當父節點索引為i時,左子節點為2i,右子節點為2i+1

堆的資料儲存可以直接用陣列存

private int data;

private int size;//當前堆的大小

private int capacity;//容量

public maxheap(int maxsize)

可以先將要插入的元素放在最後乙個位置,然後與父元素比較、不斷上移,直到該元素處於正確的位置

//堆插入元素時上移

private void shiftup(int i)

}//插入操作

public void insert(int d)

data[++size] = d;

shiftup(size);

}

最大堆刪除操作只能刪除最大元素,具體做法是將最後乙個元素放到第乙個位置,然後不斷將其下移到適當位置

//堆刪除元素時下移

private void shiftdown(int i)

if (data[i] > data[j])

break;

//交換、下移

int t = data[i];

data[i] = data[j];

data[j] = t;

i = j;}}

//刪除堆頂,將最後乙個移到堆頂,然後不斷下移即可

public int deletemax()

int t = data[1];//記錄刪除的值

data[1] = data[size--];

shiftdown(1);

return t;

}

不斷刪除最大元素即可與實現堆排序

//堆排序,可以先將陣列建成堆,然後依次刪除最大元素

public void heapsort(int arr, maxheap heap)

//從小到大排序

for (int i = arr.length - 1; i >= 0; i--)

}

今天我們來談談jquery,

恢復內容開始 首先從jquery的兩種寫法開始 1.document ready function 首先我們的jquery是用來操作dom節點的,所以必須等到文件載入完畢才能對其進行操作 以下兩種操作可能導致錯誤 2.簡潔寫法,function 所以要等到文件就緒才執行jquery 說說事件 一.k...

才不只是塑料小人 今天,我們來談談手辦

alter黒咲 芽亜 或許你經常看到這樣一群人,他們的桌面上或展櫃裡擺滿了精緻而漂亮的塑料模型,並對其懷抱著巨大的熱愛。這些被稱為手辦的物品為什麼會有那麼大的魔力?今天,我們就來談談手辦。手辦原指來自日本的garage kits gk 是套裝模件 model kits 的意思,是日系動漫周邊的一類。...

今天我們來玩遊戲(博弈)

鳴謝xym學長 其實前面的都是廢話 精髓都在最後的sg定理中了 很難理解?那好,我們舉個栗子 nim遊戲 其實學長的課件上有寫解法,但是我覺得寫得太爛 還是自己說比較清楚 複雜的情況我們考慮不過來,那就從簡單的開始 如果只有一堆,先手必勝 都拿走就好了 兩堆 如果有兩堆中的石子數目相同,那麼先手從任...