您的位置:首页 > 其它

选择排序_堆排序

2012-09-13 20:59 176 查看
程序代码:

  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)。

稳定性:不稳定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: