zoukankan      html  css  js  c++  java
  • 堆排序算法

    1.堆排序是利用堆的特性对记录序列进行排序的一种排序方法。
    好的那么堆得特性是什么呢?
    堆得定义:
    堆是满足下列性质的数列{r1, r2, …,rn}:
     1 void HeapAdjust (HeapType &H, int s, int m)  
     2 {   // 已知 H.r[s..m]中记录的关键字除 H.r[s] 之外  
     3         //均满足堆的特征,本函数自上而下调整 H.r[s]  
     4         //的关键字,使 H.r[s..m] 也成为一个大顶堆  
     5          rc = H.r[s];    // 暂存 H.r[s]   
     6          for ( j=2*s; j<=m; j*=2 ) 
     7 
     8     { // j 初值指向左孩子  
     9 
    10         自上而下的筛选过程;  
    11          }  
    12          // 自上而下的筛选过程  
    13           if ( j<m && H.r[j].key>H.r[j+1].key )  
    14                   ++j;       
    15                  // 左/右“子树根”之间先进行相互比较  
    16                  // 令 j 指示关键字较小记录的位置  
    17           if ( rc.key <= H.r[j].key )  
    18                  break;   
    19                // 再作“根”和“子树根”之间的比较,  
    20                // 若“>=”成立,则说明已找到 rc 的插  
    21                // 入位置 s ,不需要继续往下调整        
    22           H.r[s] = H.r[j];   s = j;      
    23             // 否则记录上移,尚需继续往下调整        
    24         H.r[s] = rc;  // 将调整前的堆顶记录插入到 s  (注意插入的位置为s j=2*s)  
    25 } // HeapAdjust      
    26  
    27 void HeapSort ( HeapType &H ) {
    28   // 对顺序表 H 进行堆排序
    29    for ( i=H.length/2;   i>0;   --i )
    30      HeapAdjust ( H.r, i, H.length );    // 建小顶堆
    31  
    32    for ( i=H.length; i>1; --i ) {
    33      H.r[1]←→H.r[i];           
    34           // 将堆顶记录和当前未经排序子序列
    35           //  H.r[1..i]中最后一个记录相互交换
    36      HeapAdjust(H.r, 1, i-1);  // 对 H.r[1] 进行筛选
    37      }
    38 } // HeapSort    
  • 相关阅读:
    MaxScript键盘控制盒子的移动
    MaxScript无需窗口的Timer
    Max用.Net的Dictionary将汉字转化为拼音
    关于技术美术的一些个人理解
    Max的工具部署与安装
    用以加强MaxScript的补充
    MaxScript 清除超出范围的关键帧
    Max2008之前版本旋转视图的函数
    面向对象设计的原则迪米特原则(转)
    LDAP资料
  • 原文地址:https://www.cnblogs.com/hellochennan/p/5379155.html
Copyright © 2011-2022 走看看