基本信息
源码名称:堆和堆排序源代码
源码大小:0.88KB
文件格式:.cpp
开发语言:C/C++
更新时间:2020-03-21
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍


#include <iostream>
#include <vector>

using namespace std;

void exchange(vector<int>&a,int idx,int length) {
	int tmp=idx;
	int lChild=idx*2 1;//因为下标从0开始
	int rChild=idx*2 2;
	if(a[lChild]>a[tmp]&&lChild<length) tmp=lChild;
	if(a[rChild]>a[tmp]&&rChild<length) tmp=rChild;
	
	if(idx!=tmp) {
		swap(a[tmp],a[idx]);
		exchange(a,tmp,length);
	}
}

void heapSort(vector<int>&a,int length){
	for(int i=length/2-1;i>=0;i--){
		exchange(a,i,length);
	}
	
	for(int i=length-1;i>=1;i--){
		swap(a[0],a[i]);
		exchange(a,0,i);
	}
}

void print(vector<int>&a) {
	for(int i=0; i<a.size(); i  ) {
		printf("%d%c",a[i],i==a.size()-1?'\n':' ');
	}
}

int main() {

	int n,num;
	scanf("%d",&n);
	vector<int>array;
	for (int i = 0; i<n; i  ) {
		scanf("%d",&num);
		array.push_back(num);
	}
	heapSort(array,array.size());
	print(array);
	return 0;
}