算法导论第六章,堆排序的实现,求高手帮我看看哪错了。
[code=C/C++][/code]
#include <iostream>
using namespace std;
int larget;
int index;
int heap_size;
int PARENT(int i )
{
return i/2;
}
int LEFT(int i)
{
return 2 * i;
}
int RIGHT(int i)
{
return (2*i+1);
}
void MAX_HEAPIFY(int *a,int i)
{
index = i;
int l = LEFT(index);
int r = RIGHT(index);
if (l <= heap_size && a[l]>a[index])
{
larget = l;
}
else
larget = index;
if (r <= heap_size && a[r] > a[larget])
{
larget = r;
}
if (larget != index)
{
int temp = a[index];
a[index] = a[larget];
a[larget] = a[temp];
MAX_HEAPIFY(a,larget);
}
}
void BUILD_MAX_HEAPIFY(int *a,int n)
{ int i;
heap_size = n;
for (i = n/2;i > 0;i--)
{
MAX_HEAPIFY(a,i);
}
}
void HEAP_SORT(int *a,int n)
{
BUILD_MAX_HEAPIFY(a,n);
/*for (int i = 1;i <= n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;*/
for (int i = n;i >= 2;i--)
{
int temp = a[1];
a[1] = a[i];
a[i] = temp;
heap_size = heap_size-1;
MAX_HEAPIFY(a,1);
}
}
int main()
{
int T;
cin>>T;
while (T--)
{
int n;
cin>>n;
int a[101];
for (int i = 1;i <= n;i++)
{
cin>>a[i];
}
HEAP_SORT(a,n);
for (int i = 1;i <= n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}
应该是MAX_HEAPIFY那错了,但我检查了半天,真心不知道怎么改。求高手帮我看看
[解决办法]
贴一个我的吧,lz可以对着找找bug
- C/C++ code
#include<iostream>using namespace std;void HeapAjust(int r[],int s,int t){ int j; r[0]=r[s]; for(j=2*s;j<=t;j=2*j){//沿关键码较大的孩子结点向下筛选 if(j<t && r[j]<r[j+1]) j++; //j指向R[i]的关键码较大的孩子 if(r[0]>r[j]) //不用调到叶子就到位了 break; r[s]=r[j]; s=j;//准备向下调整 } r[s]=r[0]; //插入}void HeapSort(int r[],int n){ int i; for(i=n/2;i>0;i--) HeapAjust(r,i,n); //将R[1]……R[n]建成堆 for(i=n;i>1;i--){ r[0]=r[1]; r[1]=r[i]; r[i]=r[0]; HeapAjust(r,1,i-1); //将R[1]……R[i-1]重新调整为堆 }}int main(){ int r[11]={0,3,6,2,3,6,1,9,11,42}; HeapSort(r,10);//r[0]不作为排序对象 for(int i=1;i<=10;i++) cout<<r[i]<<" "; cout<<endl; system("pause"); return 0; }