Heapsort实施

时间:2015-01-27 13:15:53

标签: heapsort

在这里输入代码

 # include <iostream>
 # include <stdlib.h>
 # define MAX 10
 void heapsort(int A[]);
 void Build_MAX_Heap(int A[]);
 void MAX_Heapify(int A[],int i);
 int Left(int i);
 int Right(int i);
 void swap(int *num,int *num2);
 using namespace std;
 int main()
 {
 int H[100],i;
 for(i=0;i<MAX;i++)
    H[i]=rand();
 cout << "the given array is::" << " ";
 for(i=0;i<MAX;i++)
     cout  << H[i] << "\n";
 cout << "\n" << "\n";
 heapsort(H);
 cout << "the sorted array is ::" << " ";
 for(i=0;i<MAX;i++)
    cout << H[i] << "\n";
 }
 void heapsort(int A[])
  {
    int i,heapsize;
     Build_MAX_Heap(A);
   for(i=MAX-1;i>0;i--)
  {
     swap(&A[0],&A[i]);
    heapsize=heapsize-1;
    MAX_Heapify(A,0);

  }
 }
 void Build_MAX_Heap(int A[])
 {
int heapsize,i;
heapsize=MAX;
for(i=(MAX)/2;i>0;i--)
{
    MAX_Heapify(A,i);
}
 }
void MAX_Heapify(int A[],int i)
{
int l,r,largest,heapsize;
l=Left(i);
r=Right(i);
if(l<=heapsize && A[l]>A[i])
    largest=l;
else
    largest=i;
if(r<=heapsize && A[r]>A[i])
    largest=r;
if(largest!=i)
{
    swap(&A[i],&A[largest]);
    MAX_Heapify(A,largest);
}
 }

int Left(int i)
{
return (2*i);
}
int Right(int i)
{
return (2*i+1);
}

`void swap(int * num1,int * num2)     {     int temp;     温度= * NUM1;     * NUM1 = * NUM2;     * NUM2 =温度;     } 在我的代码中有什么不对。没有排序。它显示了outout但不是在排序的顺序。请帮助。谢谢相同的

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些缺陷。

  • 如果您将阵列用作1索引,则左子的符号为(2 * i),右子为(2 * i + 1)的符号有效。但是当您使用数组作为0索引时,必须将它们更改为,left child =(2 * i + 1),right child =(2 * i + 2)。
  • 接下来,变量&#39; heapsize&#39;在你的功能&#39; MAX_Heapify()&#39;没有初始化。您正在使用未分配的变量,这是不正确的。
  • 在堆排序过程中,您将删除max元素并减小堆的大小。但是你没有在任何地方使用新尺寸。你应该将它传递给&#39; MAX_Heapify()&#39;所以程序知道它的界限。
  • 最后,我认为你必须在Build_MAX_Heap中运行heapify循环,直到(i> = 0),即上面的所有元素(MAX / 2),包括根。

纠正这些并重新编写代码,我认为你应该没问题。如果您想了解有关二进制堆的草图和代码的更多信息,可以查看Binary Heaps上的博文。

我希望我的回答对你有所帮助,如果有,请告诉我......! ☺