堆排序的实现

来源:互联网 发布:unity2d横版rpg源码 编辑:程序博客网 时间:2024/05/17 04:46
排序的排序码是随机产生的100个整型。
其中函数clearUp()用于将无序的排序码最大堆化。getOrder()用于交换元素时重建最大堆。堆排序的最坏时间复杂度为O(nlogn),属于不稳定排序。
#include"iostream"
#include"cstdlib"

using namespace std;
void swap1(int *p1,int *p2)
{
    int a=*p1;
    *p1=*p2;
    *p2=a;
}

void getOrder(int *p,int m,int n)
{
    int i=m;
    int j=2*i+1;
   while(j<=n)
    {
      if(j+1<=n&&p[j]
           j++;
       if(p[i]
       {
          swap1(p+i,p+j);
           i=j;
          j=2*i+1;
       }
       else
           break;
    }
}

void clearUp(int *p,int n)
{
    int m=(n-1)/2;
    for(inti=m;i>=0;i--)
    {
      getOrder(p,i,n);
    }
}

int main()
{
    int m=100;
    int n=100;
    int array1[m+1];
    for(int i=0;i
       array1[i]=rand()0;
      cout<<"初始化:"<<endl;
    for(int i=0;i
      cout<<array1[i]<<" ";
      cout<<endl<<endl;
    clearUp(array1,m);
    for(int i=0;i
    {
       getOrder(array1,0,m);
       swap1(array1+0,array1+m);
       m--;
    }
   cout<<"堆排序后:"<<endl;
    for(int i=0;i
      cout<<array1[i]<<" ";
    return 0;
}
0 0
原创粉丝点击