堆最大化 將無序陣列建立為最大堆 以及堆排序

2021-09-10 02:09:11 字數 1263 閱讀 5225

最大堆化:引數為指定陣列和指定陣列下標,尋找該下標陣列值的左右子節點,將較小值遞迴往子節點塞。

void

max_heapify

(int a[

],int i)

}

將無序陣列建立為最大堆:從最後乙個葉節點開始,對於其父節點進行最大堆化,直到根節點。

void

build_max_heapify

(int a)

}

堆排序:先將乙個無序陣列轉為最大堆,再將最後乙個葉節點與根節點交換,並將最後乙個葉節點踢出堆(以減少堆大小heapsize實現),再進行最大堆化,迴圈進行。

void

heapsort

(int a)

}

以下為原始碼:

#include 

int length =10;

//陣列長度

int heapsize;

//堆大小

int parent

(int i)

int left

(int i)

int right

(int i)

void

exchange

(int a[

],int m,int n)

void

max_heapify

(int a[

],int i)

}void

build_max_heapify

(int a)

}void

heapsort

(int a)

} int main()

; int i;

for(i=

0;i<

10;i++

)printf

("\n將無序陣列轉換為最大堆\n");

build_max_heapify

(a);

// max_heapify(a,1);

for(i=

0;i<

10;i++

)heapsort

(a);

printf

("\n將最大堆轉換為有序陣列\n");

for(i=

0;i<

10;i++

)return0;

}

參考:《演算法導論》

(如有需更正的地方請大佬指出)

最大化 如何將RPA的價值最大化?

自動化技術讓企業能夠更有效的利用資源,減少由於人為失誤而造成的風險損失。隨著科技的進步,實現自動化的途徑變得更加多樣化。據forrester 自動化技術將在2019年成為引領數位化轉型的前沿技術,幫助重塑商業模式和客戶體驗。但是市面上有那麼多提供自動化技術的產品,究竟選擇哪乙個更合適?尤其是當這些技...

無序陣列求最大差值

乙個陣列a 0.n 1 求a j a i 的最大值,其中icite 第一種方法 從左往右求下標0到 k 1 的最小值min 從右往左求 下標k到n 1 的最大值max,對於每個k都有乙個max min的值,最後求這個值的最大值即可。例如陣列 4 5 2 6 3 1 k 1 2 3 4 5 min 4...

K次取反後最大化的陣列和

題目鏈結 給定乙個整數陣列 a,我們只能用以下方法修改該陣列 我們選擇某個索引 i 並將 a i 替換為 a i 然後總共重複這個過程 k 次。我們可以多次選擇同乙個索引 i。以這種方式修改陣列後,返回陣列可能的最大和。示例 1 輸入 a 4,2,3 k 1 輸出 5 解釋 選擇索引 1,然後 a ...