堆排序

#include
using namespace std;
void PrintArray(int data[],int size)
{
for(int i=1;i<=size;++i)
cout<<data[i]<<" ";
cout<<endl;
};
void MaxHeapify(int *a,int i,int size)
{
int lt=2*i,rt=2*i+1;
int largest;
if(lt<=size&&a[lt]>a[i])
largest=lt;
else
largest=i;
if(rt<=size&&a[rt]>a[largest])
largest=rt;
if(largest!=i)
{
int tmp=a[i];
a[i]=a[largest];
a[largest]=tmp;
MaxHeapify(a,largest,size);
}
};
void BuildMaxHeap(int *a,int size)
{
for(int i=size/2;i>=1;--i)
MaxHeapify(a,i,size);
};
void HeapSort(int *a,int size)
{
BuildMaxHeap(a,size);
cout<<"\n-------------------\n";
cout<<"建最大堆:";
PrintArray(a,size);
cout<<"\n-------------------\n";
int len=size;
for(int i=size;i>=2;--i)
{
int temp=a[1];
a[1]=a[i];
a[i]=temp;
len--;
MaxHeapify(a,1,len);
cout<<"中間過程:";
PrintArray(a,size);
}
};
int main()
{
int size;
int arr[100];
cout<<"Input the number of elements:\n";
cin>>size;
cout<<"Input the elements:\n";
for(int i=1;i<=size;++i)
cin>>arr[i];
cout<<endl;
HeapSort(arr,size);
cout<<"最後結果:";
PrintArray(arr,size);
return 0;

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章