void sift(int k,int m)
{
int temp=data[k];
int i=k;
int j=2*i;
bool finished=false;
while(j<=m&&!finished)
{
if(j<m&&data[j]<data[j+1])
j++;
if(data[j]<=temp)
finished=true;
else
{
data[i]=data[j];
i=j;
j=2*i;
}
}
data[i]=temp;
}
void Build_heap()
{
int i;
int length=ROWS-1;
for(i=length/2;i>0;i--)
sift(i,ROWS-1);
}
void Heap_sort()
{
int i;
Build_heap();
int temp;
for(i=ROWS-1;i>1;--i)
{
temp=data[1];
data[1]=data[i];
data[i]=temp;
sift(1,i-1);
}
}
堆排序实现
最新推荐文章于 2024-07-31 16:52:17 发布