堆排序(Heap Sort)

堆排序是一种适用于大规模数据的排序算法,其时间复杂度为O(nlogn),尤其在创建初始堆和调整堆的过程中表现优秀。尽管对于小规模数据不占优势,但因其只需要一个辅助空间进行元素交换,故在资源有限的场景下具有优势。
摘要由CSDN通过智能技术生成

参照《数据结构》(C语言版)严蔚敏著

#include <iostream.h>

struct SqList
{
	int r[100];
	int length;
};

void HeapAjust(SqList &H, int s, int m);
void HeapSort(SqList &H);

int main(void)
{
	SqList H;  
    H.r[1]=49;  
    H.r[2]=38;  
    H.r[3]=65;  
    H.r[4]=97;  
    H.r[5]=76;  
    H.r[6]=13;  
    H.r[7]=27;  
    H.r[8]=49;  
    H.length=8;

	HeapSort(H);

	cout << endl;
	return 0;
}


void HeapAjust(SqList &H, int s, int m)
{//已知H.r[s..m]中记录的关键字除H.r[s]之外均满足堆定义
 //本函数调整H.r[s]的关键字,使H.r[s..m]成为一个大顶堆
	int rc=H.r[s];

	for(int j=s*2;j<=m;j*=2)
	{
		if(j<m && H.r[j]<H.r[j+1])
		{//找出当前结点的左右孩子结点中的较大者
			j++;
		}

		//将当前结点与孩子结点中的较大者比较
		if(rc>H.r[j]) 
		{//当前结点比孩子结点都大,则满足堆定义,则不再调整
			break;
		}
		else
		{//继续调整该结点
			H.r[s]=H.r[j];
			s=j;
		}
	}
	H.r[s]=rc;
}

void HeapSort(SqList &H)
{
	int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值