用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

堆排序

2012-10-11 作者: 神马举报

[c]代码库

void HeapAdjust ( S_TBL *h,int s,int m )
{/*r[s…m]中的记录关键码除r[s]外均满足堆的定义,本函数将对第s 个结点为根的子树筛选,使其成为大顶堆*/
    rc=h->r[s];
    for ( j=2*s; j<=m; j=j*2 ) /* 沿关键码较大的子女结点向下筛选*/
    {
        if ( j<m&&h->r[j].key<h->r[j+1].key )
            j=j+1; /* 为关键码较大的元素下标*/
        if ( rc.key<h->r[j].key ) break; /* rc 应插入在位置s 上*/
        h->r[s]=h->r[j];
        s=j; /* 使s 结点满足堆定义*/
    }
    h->r[s]=rc; /* 插入*/
}
void HeapSort ( S_TBL *h )
{
    for ( i=h->length/2; i>0; i-- ) /* 将r[1..length]建成堆*/
        HeapAdjust ( h,i,h->length );
    for ( i=h->length; i>1; i-- )
    {
        h->r[1]<-->h->r[i]; /* 堆顶与堆低元素交换*/
        HeapAdjust ( h,1,i-1 ); /*将r[1..i-1]重新调整为堆*/
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...