#include <iostream>
#include <ctime>
using namespace std;
void adjust(int *a, int i, int n)
{
int large, l;
while(i*2+1 < n)
{
large = i;
l = i*2 + 1;
if(a[l]>a[i])
large = l;
if(l+1<n && a[l+1]>a[large])
large = l+1;
if(large == i)
return ;
swap(a[i], a[large]);
i = large;
}
}
void heap_sort(int* a, int n)
{
int m = (n-2)/2;
int i;
for(i=m; i>=0; i--)
adjust(a, i, n);
for(i=n-1; i>0; i--)
{
swap(a[i], a[0]);
adjust(a, 0, i);
}
}
int main()
{
int len = 20;
int *a = new int[len];
srand((unsigned)time(0));
int i;
cout<<"before sort:"<<endl;
for(i=0; i<len; i++)
{
a[i] = rand()%100;
cout<<a[i]<<" ";
}
cout<<endl<<"after sort:"<<endl;
heap_sort(a, len);
for(i=0; i<len; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
堆排序
最新推荐文章于 2019-06-05 20:43:42 发布