#include<iostream>
#include<algorithm>
using namespace std;
void print(int *arr,int length)
{
for(int i = 0;i <
length;i++)
{
cout<<arr[i]<<"\t";
}
cout<<"\n";
}
void heapAdjust(int *arr,int i,int length)
{
int lchild = 2 *
i + 1;
int rchild = 2 * (i + 1);
int max = i;
if(i
<= length/2)
{
if(lchild <= length &&
arr[lchild] > arr[max])
max =
lchild;
if(rchild <= length && arr[rchild] >
arr[max])
max = rchild;
if(max !=
i)
{
swap(arr[max],arr[i]);
heapAdjust(arr,max,length);
}
}
}
void
sort(int *arr,int length)
{
for(int i = length/2 -1 ;i >= 0;
i--)
{
heapAdjust(arr,i,length);
}
for(i
= length-1;i >
0;i--)
{
swap(arr[0],arr[i]);
heapAdjust(arr,0,i-1);
}
}
int main()
{
int arr[] = {8,5,7,4,6,2,3,1,9};
int size =
sizeof(arr)/sizeof(int);
cout<<"排序前数组元素为:"<<endl;
print(arr,size);
sort(arr,size);
cout<<"排序后数组元素为:"<<endl;
print(arr,size);
return
0;
}
原文:http://www.cnblogs.com/WangYinlong/p/3549110.html