Codevs

时间:2024-01-01 08:24:21
 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 白银 Silver
题目描述 Description

给出n和n个整数,希望你从小到大给他们排序

输入描述 Input Description

第一行一个正整数n

第二行n个用空格隔开的整数

输出描述 Output Description

输出仅一行,从小到大输出n个用空格隔开的整数

样例输入 Sample Input

3

3 1 2

样例输出 Sample Output

1 2 3

数据范围及提示 Data Size & Hint

1<=n<=100000

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int x,n,m,heap[],heap_size;
void put()
{// 小根堆的插入 插入到堆底 向上维护
int now,next;
heap[++heap_size]=x;
now=heap_size;
while(now>)
{
next=now/;
if(heap[next]<=heap[now]) return;
swap(heap[now],heap[next]);
now=next;
}
}
int get()
{
int now=,next,res;
res=heap[];
heap[]=heap[heap_size--];
while(now*<=heap_size)
{
next=now*;
if(next<heap_size&&heap[next+]<heap[next]) next++;
if(heap[now]<=heap[next]) return res;
swap(heap[now],heap[next]);
now=next;
}
return res;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&x),put();
for(int i=;i<=n;i++)
printf("%d ",get());
return ; return ;
}

堆排序~~~~