[C] 堆排序 →→→→→进入此内容的聊天室

来自 , 2020-05-28, 写在 C, 查看 107 次.
URL http://www.code666.cn/view/3b92d18a
  1. void HeapAdjust ( S_TBL *h,int s,int m )
  2. {/*r[s…m]中的记录关键码除r[s]外均满足堆的定义,本函数将对第s 个结点为根的子树筛选,使其成为大顶堆*/
  3.         rc=h->r[s];
  4.         for ( j=2*s; j<=m; j=j*2 ) /* 沿关键码较大的子女结点向下筛选*/
  5.         {
  6.                 if ( j<m&&h->r[j].key<h->r[j+1].key )
  7.                         j=j+1; /* 为关键码较大的元素下标*/
  8.                 if ( rc.key<h->r[j].key ) break; /* rc 应插入在位置s 上*/
  9.                 h->r[s]=h->r[j];
  10.                 s=j; /* 使s 结点满足堆定义*/
  11.         }
  12.         h->r[s]=rc; /* 插入*/
  13. }
  14. void HeapSort ( S_TBL *h )
  15. {
  16.         for ( i=h->length/2; i>0; i-- ) /* 将r[1..length]建成堆*/
  17.                 HeapAdjust ( h,i,h->length );
  18.         for ( i=h->length; i>1; i-- )
  19.         {
  20.                 h->r[1]<-->h->r[i]; /* 堆顶与堆低元素交换*/
  21.                 HeapAdjust ( h,1,i-1 ); /*将r[1..i-1]重新调整为堆*/
  22.         }
  23. }
  24.  
  25.  

回复 "堆排序"

这儿你可以回复上面这条便签

captcha