我有一個女巫堆排序問題。我不知道我的代碼有什麼問題。這個程序只改變了表中的第二個和最後一個位置。這是我的代碼(沒有主要功能):堆排序heapify排序
#include<stdio.h>
#define DUZO 100000000
int heap_size;
int tab[DUZO];
void heapify(int start){
int l, r, largest, pom;
l = 2*start + 1;
r = 2*start + 2;
if((l < heap_size) && (tab[l] > tab[start]))
largest = l;
else
largest = start;
if((r < heap_size) && (tab[r] > tab[largest]))
largest = r;
if(largest != start){
pom = tab[start];
tab[start] = tab[largest];
tab[largest] = pom;
heapify(largest);
}
}
void build_max(){
int lenght, i;
lenght = heap_size;
for(i = ((lenght - 1)/2); i >= 0; --i){
heapify(i);
}
}
void heap_sort(){
int i;
build_max();
for(i = heap_size-1; i > 0; --i) {
int tmp = tab[0];
tab[0] = tab[i];
tab[i] = tmp;
--heap_size;
heapify(0);
}
}
感謝您的一切幫助。
如果您逐行添加解釋每個語句,循環和函數的*目的*的註釋,它可能會幫助他人閱讀此代碼。在這樣做的過程中,您可能會發現代碼實際執行的地方與您打算執行的操作不一致。 –
爲什麼不僅僅使用許多現有的heapsort實現之一而不是試圖編寫自己的? –
同意,有人在評論中標記爲close。我將標記爲保持打開狀態,但您應該添加註釋並顯示輸出(使用小型輸入數據集)並提供一個主體,以便它可以在不進行編輯的情況下運行。 –