最大堆化:引數為指定陣列和指定陣列下標,尋找該下標陣列值的左右子節點,將較小值遞迴往子節點塞。
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 ...