C++堆排序

/*
*用自底向上算法,从给定的数组元素中构造一个堆
*输入:一个可排序元素的数组H[1...n]
*输出:一个堆H[1...n]
*/
int HeapBottom(int H[],int n){
	int j,k,v;bool heap;
	for (int i = n/2; i >0; i--)
	{
		k=i;v=H[k];
		heap=false;
		while (!heap&&2*k<=n)
		{
			j=2*k;
			if (j<n)
				if (H[j]<H[j+1])
					j=j+1;
			if(v>=H[j])
				heap=true;
			else
			{
				H[k]=H[j];
				k=j;
			}
		}
		H[k]=v;
	}
	return 0;
}


/*
*第一步:根的键和堆的最后一个键K交换
*第二步:堆的规模减一
*第三步:按照上面自底向上堆构造的算法中的做法,把K沿着树向下筛选,对这颗较小的树进行堆化
*/
int HeapSort(int H[],int n){
	while (n>1)
	{
		int temp;
		temp=H[1];H[1]=H[n];H[n]=temp;
		n--;
		HeapBottom(H,n);
	}
	return 0;
}
#include<iostream>
#include"HeapSort.h"
using namespace std;
int main(){
	int array[7] = {0,2,9,7,6,5,8}; //注:堆从H[1]开始,到H[n]
	int n=sizeof(array)/sizeof(int);
	cout<<"排序前:";
	for (int i = 1; i < n; i++)
		cout<<array[i]<<" ";
	cout<<endl;
	HeapBottom(array,n);
	cout<<"排序后:";
	for (int i = 1; i < n; i++)
		cout<<array[i]<<" ";
	cout<<endl;
    return 0;  
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值