프로그래밍 알고리즘

[정올 2082] 힙정렬2 (Heap_Sort)

꾸준한사람 2023. 1. 7. 15:39
반응형

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2283&sca=99&sfl=wr_hit&stx=2082 

 

JUNGOL

 

www.jungol.co.kr

#include <stdio.h>

int ar[500100], cnt, N, ans[500100], anscnt;

void swap(int& rA, int& rB)
{
	int tmp = rA;	rA = rB;	rB = tmp;
}

void heapify()
{
	int ci = cnt; //childindex
	while (ci > 1 && ar[ci / 2] < ar[ci]) {
		swap(ar[ci], ar[ci / 2]);
		ci /= 2;
	}
}

int pop()
{
	int first = ar[1];
	swap(ar[1], ar[cnt]);
	ar[cnt--] = 0;

	int pi = 1, ci = 2;

	while (ci <= cnt)
	{
		if (ar[ci] < ar[ci + 1]) ci++;
		if (ar[pi] > ar[ci]) break;
		swap(ar[pi], ar[ci]);
		pi = ci; ci *= 2;
	}

	return first;
}

int main()
{
	scanf("%d", &N);
	for (int i = 0; i < N; i++)
	{
		scanf(" %d", &ar[++cnt]);
		heapify();
	}
	for (int i = 1; i <= cnt; i++)	printf("%d ", ar[i]);
	printf("\n");

	while (cnt)	ans[++anscnt] = pop();

	for (int i = anscnt; i > 0; i--)	printf("%d ", ans[i]);
	printf("\n");

	return 0;
}
반응형

'프로그래밍 알고리즘' 카테고리의 다른 글

[정올 2247] 도서관  (0) 2023.01.07
[정올 2194] 요플레공장  (1) 2023.01.07
[정올 1972] 정렬(SORT)  (1) 2023.01.07
[정올 1912] 미로 탐색  (0) 2023.01.06
[정올 1901] 소수 구하기  (0) 2023.01.06