您的位置:首页 > 其它

堆排序

2012-09-07 14:45 176 查看
代码示例:

#include<iostream>

using namespace std;

void Adjust(int *a,int s,int m )

{

int t=a[s];

int j;

for(j=2*s;j<m;j++)

{

if(a[j]<a[j+1]) j++;

if(t>a[j]) break;

a[s]=a[j];

s=j;

}

a[s]=t;

}

void heapsort(int *a,int n)

{

int i;

for( i=n/2;i>=0;i--)

Adjust(a,i,n);//构建初始大顶堆

while(n>=1)

{

swap(a[0],a[n-1]);

cout<<a[n-1]<<endl;

n--;

Adjust(a,0,n-1);

}

}

int main()

{

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

heapsort(a,8);

return 0;

}

堆排序在最坏的情况下,其时间复杂也为O(nlogn).相对于快速排序来说,这是堆排序的最大优点。此外,堆排序仅需一个记录大小供交换用的辅助空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: