//交换两个数
void swap(int &a,int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
//调整堆,保持最大堆性质
void HeapAdjust(int *array,int i,int length)
{
int lchild = 2*i;
int rchild = 2*i+1;
int max = i;
if(i<=length/2)
{
if(lchild <= length && array[lchild] > array[max])
max = lchild;
if(rchild <= length && array[rchild] > array[max])
max = rchild;
if(max!=i)
{
swap(array[i],array[max]);
HeapAdjust(array,max,length);
}
}
}
//建立堆
void BuildHeap(int *array,int length)
{
int i;
for(i=length/2;i>=1;i--)
{
HeapAdjust(array,i,length);
}
}
//堆排序
void HeapSort(int *array,int length)
{
int i;
BuildHeap(array,length);
for(i=length;i>=1;i--)
{
swap(array[1],array[i]);
HeapAdjust(array,1,i-1);
}
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布