[ create a new paste ] login | about

Link: http://codepad.org/VXVB8VAB    [ raw code | fork ]

C++, pasted on Sep 26:
#include <cstdio>
#include <algorithm>
using std::swap;
const int maxn = 10001;
int f[maxn], size, n;
void down(int i) {
	int p, l, r;
	while(true) {
		p = i, l = i << 1, r = l + 1;
		if (l <= size && f[p] < f[l]) p = l;
		if (r <= size && f[p] < f[r]) p = r;
		if (i == p) break;
		swap(f[i], f[p]);
		i = p;
	}
}
void build() {
	for (int i = size >> 1; i >= 1; --i)
		down(i);
}
int main(void) {
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i)
		scanf("%d", f + i);
	size = n;
	build();
	while(size > 1) {
		swap(f[1], f[size]);
		--size;
		down(1);
	}
	for (int i = 1; i <= n; i++)
		printf("%d ", f[i]);
	printf("\n");
	return 0;
}


Create a new paste based on this one


Comments: