堆排序

来源:互联网 发布:淘宝转运仓单号填错 编辑:程序博客网 时间:2024/06/07 08:02

代码示例:

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

原创粉丝点击