用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...