Im在我的算法类中为一个赋值实现了HeapSort,最后Im完成了,但由于某种原因,这个排序正在跳过我的数组中的第一个元素。为什么我的HeapSort会跳过数组中的第一个元素?
原始阵列:堆排序后
int heapArray[SIZE] = { 5 ,99, 32, 4, 1, 12, 15 , 8, 13, 55 };
输出()
5 99 32 15 13 12 8 4 1
㈣走过所有功能和不能找出为什么它的跳过第一个元素。谁能帮我吗? Iv包含下面的所有HeapSort函数。我知道它很好看,但我很抱歉。
int main()
{
int heapArray[SIZE] = { 5 ,99, 32, 4, 1, 12, 15 , 8, 13, 55 };
HeapSort(heapArray);
return 0;
}
............................................ ..............................................
void HeapSort(int heapArray[])
{
int heap_size = SIZE;
int n = SIZE;
int temp;
Build_Max_Heap(heapArray);
for(int i = n-1; i >= 2; i--)
{
temp = heapArray[1];
heapArray[1] = heapArray[i];
heapArray[i] = temp;
heap_size = heap_size-1;
Max_Heapify(heapArray,1);
}
return;
}
................................................ ............................................
void Build_Max_Heap(int heapArray[])
{
double n = SIZE;
for(double i = floor((n-1)/2); i >= 1; i--)
{
Max_Heapify(heapArray,i);
}
return;
}
................................................. ..........................................
void Max_Heapify(int heapArray[],int i)
{
int n = SIZE;
int largest = 0;
int l = Left(i);
int r = Right(i);
if((l <= n) && (heapArray[l] > heapArray[i]))
{
largest = l;
}
else
{
largest = i;
}
if((r <= n) && (heapArray[r] > heapArray[largest]))
{
largest = r;
}
int temp;
if(largest != i)
{
temp = heapArray[i];
heapArray[i] = heapArray[largest];
heapArray[largest] = temp;
Max_Heapify(heapArray,largest);
}
return;
}
............................................. ............................................. ..............................................
int Parent(int i)
{
return (i/2);
}
int Left(int i)
{
return (2*i);
}
int Right(int i)
{
return ((2*i)+1);
}
您的代码从不访问任何这些函数中的'heapArray [0]'。你认为第一个元素是在'heapArray [1]'吗? – 2013-03-17 23:43:06