您的位置:首页 > 其它

算法导论笔记之----堆排序

2012-07-24 09:08 246 查看
最大堆,父节点大于它的孩子节点的值。。。先采用递归的方法,建立一个最大堆,然后将堆的最高父节点与当前所保留的树最后一个节点交换,同时去掉最后一个节点,将剩余树从新建堆。。
#include<iostream>
using namespace std;
void Buildhead(int *arr,int parent,int longth)
{
int lagest;
if(parent*2+1<=longth)
{
for(;parent>=0;--parent)
{
lagest=parent*2+1;
if(lagest+1<=longth&&arr[lagest]<arr[lagest+1])
lagest++;
if(arr[parent]<arr[lagest])
{
swap(arr[parent],arr[lagest]);
Buildhead(arr,lagest,longth);
}
}
}
}
void B_sort(int *arr,int longth)
{
Buildhead(arr,(longth-1)/2,longth);//建立一个最大堆
for(int i=longth;i>0;)
{
swap(arr[i],arr[0]);
i--;
Buildhead(arr,(i-1)/2,i);
}
}
int main()
{
int T=0;
int *arr;
while(cin>>T,T)
{
arr=new int[T];
cout<<"please input "<<T<<"numbers: ";
for(int i=0;i<T;++i)
cin>>arr[i];
B_sort(arr,T-1);
for(int i=0;i<T;++i)
cout<<arr[i]<<" ";
cout<<endl;
delete arr;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 input