SSL 1271堆排序I
Posted SSL_ZZL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSL 1271堆排序I相关的知识,希望对你有一定的参考价值。
排序I
题目
Description
输入n(<=100000)个数,由小到大输出
Input
第一行,一个整数n
第二行,n个数
Output
由小到大输出 n 个数
Sample Input
5
3 2 1 4 5
Sample Output
1 2 3 4 5
解题思路
Code
#include <iostream>
#include <cstdio>
#define N 100000
#define ll long long
using namespace std;
int n;
ll a[N * 4 + 200];
void up(int x)
while(x > 1 && a[x / 2] > a[x])
swap(a[x], a[x / 2]);
x = x / 2;
void down(int x)
int t = x * 2;
if (t < n && a[t] > a[t + 1]) t ++;
while(x <= n && t <= n && a[x] > a[t])
swap(a[x], a[t]);
x = t, t = x * 2;
if (t < n && a[t] > a[t + 1]) t ++;
int main()
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
scanf("%lld", &a[i]);
for(int i = n / 2; i; i --)
down(i);
for(int i = 1, m = n; i < m; i ++)
printf("%lld ", a[1]);
a[1] = a[n], n --, down(1);
printf("%lld", a[1]);
以上是关于SSL 1271堆排序I的主要内容,如果未能解决你的问题,请参考以下文章