int Swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void Heap_build(int a[],int root,int length)
{
int lchild=root*2+1;
if(lchild<length)
{
int flag=lchild;
int rchild=lchild+1;
if(rchild<length)
{
if(a[rchild]>a[flag])
{
flag=rchild;
}
}
if(a[root]<a[flag])
{
Swap(a[root],a[flag]);
Heap_build(a,flag,length);
}
}
}
void Heap_sort(int a[],int len)
{
for(int i=len/2-1,i>=0;i--)//從最後一個非葉子節點的父節點開始建堆
{
Heap_build(a,i,len);
}
for(int j=len-1;j>0;j--)
{
Swap(a[0],a[j]);
Heap_build(a,0,j);
}
}
CPP 實現堆排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.