堆排序示例:对n个整数进行排序.

堆排序是一种效率较高的排序算法,适用于一般规模的数据排序。它不使用递归,易于实现,稳定性虽不如快速排序,但在实际应用中仍表现出良好的效果。本文提供了一个C++实现的堆排序示例代码,通过不断建立最大堆并移出最大元素至末尾,完成升序排序。
摘要由CSDN通过智能技术生成

堆排序是一种比较高效的算法.虽然在大规模排序时不及快排,但是这个算法较容易实现,不易错(因为没有用到递归),一般规模的排序还是效果不错的.

以下是示例代码:

#include<iostream>
using namespace std;

void heapsort(int num[], int n);	//func decl.

int main(void)
{
	int n, *num;	//define var.
	while(cin >> n) {
		num = new int[n];	//new spaces.
		
		/*input data.*/
		for(int i = 0; i < n; ++i)
			cin >> num[i];
		/*sorting.*/
		heapsort(num, n);

		/*output data.*/
		for(int i = 0; i < n; ++i)
			cout << ' ' << num[i];
		cout << endl;

		delete[] num;	//delete spaces.
	}
	return 0;
}//main.

void HeapAdjust(int num[], int n)
{
	int m = n/2; //num of nodes that have child nodes.
	for(int i = m; i >= 1; --i)
	{
		if(2*i < n && num[i-1] < num[2*i]) {
			int t = num[i-1];
			num[i-1] = num[2*i];
			num[2*i] = t;
		}
		if(num[i-1] < num[2*i-1]) {
			int t = num[i-1];
			num[i-1] = num[2*
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值