选择排序_堆排序

程序代码:

  void HeapAdjust(Elem R[],int s,int m)

  {

    rc = R[s];

    for(i = 2*s;i <= m; i++)      //查找rc应插入的位置  

    {  

      if((i < m && R[i]<R[i+1])

        i++;            //i为左右子树较大记录的下标

      if(rc > R[i])

        break;

      R[s] = R[i];

      s = i;

    }

    R[s] = rc;

  }

  void HeapSort(Elem R[],int n)

  {

    for(i = n/2;i > 0 ;i--)        //建立大顶堆

      HeapAdjust(R,i,n);

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

    {

      swap(R[1],R[i]);        //将堆顶记录和当前未经排序子序列R[1,--,i]中的最后一个记录交换

      HeapAdjust(R,1,i-1);       //对R[1]进行筛选,选出未排序子序列R[1,--,i]中的最大值

    }

  }

时间复杂度:O(nlogn)。

稳定性:不稳定。

posted @ 2012-09-13 20:59  毛毛hhmm  阅读(121)  评论(0编辑  收藏  举报