您的位置:首页 > 其它

想了两天,终于把堆排序搞懂了。

2010-04-27 09:15 225 查看
//堆排序

#include<iostream>

#define MAX 100

using namespace std;

void display(int a[],int n);

void silt(int a[],int n,int m)

{

int t;

t=a[m];

int j=2*(m+1)-1;

// display(a,n);

while(j<=n)

{

while(j<n && a[j]<a[j+1])//=

j++;

if(t<a[j])

{

a[m]=a[j];

m=j;

j=2*(j+1)-1;

}

else

j=n+1;

}

a[m]=t;

display(a,n);

}

void ssort(int a[],int n)

{

int m=n/2;

for(int i=m-1;i>=0;i--)

{

silt(a,n-1,i);

}

for(int i=n-1;i>=0;i--)

{

int temp=a[0];a[0]=a[i];a[i]=temp; //把最小的放到尾部。

silt(a,i-1,0);

}

}

void display(int a[],int n)

{

for(int i=0;i<=n;i++)

{

// cout<<"a["<<i<<"]="<<a[i]<<" ";

cout<<a[i]<<" ";

}

cout<<endl;

}

int main()

{

int a[]={2,8,3,6,9,5,1,4,0,7};

int n=10;

ssort(a,n);

// silt(a,n,(n/2));

display(a,n);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: