堆排序
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).相对于快速排序来说,这是堆排序的最大优点。此外,堆排序仅需一个记录大小供交换用的辅助空间。
#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).相对于快速排序来说,这是堆排序的最大优点。此外,堆排序仅需一个记录大小供交换用的辅助空间。