1
編輯: 現在它只能在前兩個數字中工作,只是這次[1]索引中的數字應與[0]索引中的數字交換。然而,每當我去做,我的程序崩潰...我對我的一個項目我不得不時間不同的排序算法,到目前爲止,我已經讓他們都工作,但我的堆排序。一切似乎工作正常,但是當我輸出排序的數組,前兩個值混亂,我似乎無法找出原因。 13, -33686019, 0, 0:堆排序,除前兩個值以外的所有內容都排序
void heapify(int* array, int index, int size)
{
int j, temp;
temp = array[index];
j = (2 * index);
while (j <= size)
{
if (j < size && array[j + 1] > array[j])
j = (j + 1);
if (temp > array[j])
break;
else if (temp <= array[j])
{
array[(j/2)] = array[j];
j = (2 * j);
}
}
array[(j/2)] = temp;
return;
}
void buildHeap(int* array, int size)
{
int i;
for (i = (size/2); i >= 1; i--)
{
heapify(array, i, size);
}
}
double heapsort(int* array, int size)
{
int i;
clock_t end, begin;
begin = clock(); //Start the timer//
buildHeap(array, size);
for (i = size; i >= 2; i--)
{
swap(array[i], array[1]);
heapify(array, 1, (i - 1));
}
end = clock(); //Stop the timer//
return diffClocks(end, begin); //Return the amount of time it took to sort//
}
不幸的是,內部的是給我們並改變每個它的運行時間,但輸出的一個示例是一個main()是隨機生成的陣列, 1, 2, 3, 。 。 。 (一切從這裏開始排序)
謝謝,我不敢相信我沒有看到。這確實確定了這個龐大的數字,但我仍然有一個像上面那樣的13,它仍然在排序部分的前面,我無法找到它來自哪裏。 – Jab2ak
@ Jab2ak它可能來自您的排序算法的邏輯(不包括排序中的第一個數組元素,** array [0] **)。你應該仔細檢查一遍。 –