#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
void HeapAdjust(int *A,int s,int m)
{
int t=A[s];
for(int i=2*s+1;i<m;i=2*i+1)
{
if(i+1<m&&A[i]<A[i+1]) i++;
if(t>=A[i]) break;
A[s]=A[i];
s=i;
}
A[s]=t;
}
void HeapSort(int *A,int N)
{
for(int i=N/2-1;i>=0;i--)
HeapAdjust(A,i,N);
for(int i=0;i<N;i++)
{
swap(A[N-i-1],A[0]);
HeapAdjust(A,0,N-i-1);
}
}
int main()
{
int array[10]={4,5,2,5,7,8,1,2,9,0};
HeapSort(array,10);
for(int i=0;i<10;i++)
cout<<array[i]<<" ";
cout<<endl;
return 0;
}
堆排序 C++实现
最新推荐文章于 2021-08-07 10:03:09 发布