堆的创建(自顶向下插入)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<set>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#define maxn 10005
#define maxz 1005
#define INF 99999999
#define LL long long
#define PI 3.1415926
#define MOD 50000
using namespace std;
int n,m;
int a[maxn];
void creatheap(int i)
{
	int t=a[i];
	int zz=i;
	while((zz>1)&&a[zz/2]>t)
	{
		a[zz]=a[zz/2];
		zz=zz/2;
	}
	a[zz]=t;
}
int main()
{ 
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		creatheap(i);
	}
	for(int i=1;i<=n;i++)
	{
		cout << a[i] << ' ';
	} 
	cout << endl;
 	return 0;
}


猜你喜欢

转载自blog.csdn.net/wwwlps/article/details/79439941