#include<iostream.h>
void Exchange(int *a,int i,int largest)
{
int temp=a[i];
a[i]=a[largest];
a[largest]=temp;
}
Keep(int *a,int i,int n)
{
int largest;
int l=2*i+1;
int r=2*i+2;
if(l<=(n-1)&&a[l]>a[i])
{
largest=l;
}
else
largest=i;
if(r<=(n-1)&&a[r]>a[largest])
{
largest=r;
}
if(largest!=i)
{
cout<<endl;
cout<<"a["<<i<<"]="<<a[i]<<endl;
cout<<"a["<<largest<<"]="<<a[largest]<<endl;
Exchange(a,i,largest);
cout<<endl;
cout<<"a["<<i<<"]="<<a[i]<<endl;
cout<<"a["<<largest<<"]="<<a[largest]<<endl;
Keep(a,largest,n);
}
}
Solt(int *a,int n)
{
for(int i=(n-1)/2;i>=0;i--)
{
Keep(a,i,n);
}
}
void main()
{
int Num;
cout<<"how many int num do you want do input?"<<endl;
cin>>Num;
int *ARR=new int[Num];
for (int i=0;i<Num;i++)
{
cin>>ARR[i];
}
Solt(ARR,Num);
cout<<endl;
cout<<endl;
for (i=0;i<Num;i++)
{
cout<<ARR[i]<<endl;
}
}
C++实现堆排序(更新版)
最新推荐文章于 2022-07-16 00:02:01 发布