본문 바로가기

[C언어] 백준온라인/정렬

[C 언어] 백준 2751. 수 정렬하기 2


2751. 수 정렬하기 2 (누르면 해당 문제로 이동)

시간 복잡도가 O(nlogn) 인 정렬 알고리즘으로 풀 수 있습니다.

예를 들면 병합 정렬, 힙 정렬 등이 있지만, 어려운 알고리즘이므로 지금은 언어에 내장된 정렬 함수를 쓰는 것을 추천드립니다.

 

제약사항)

시간 : 2 초

메모리 : 256 MB

 

문제)

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

 

입력)

첫째 줄에 수의 개수 N(1<=N<=1,000,000)이 주어진다.

둘째 줄부터 N개의 줄에는 숫자가 주어진다.

이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

 

출력)

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

 

입출력 예제

입력 출력
5
5
4
3
2
1
1
2
3
4
5

 


 

풀이 순서)

이전에 C언어에 내장된 quick sort(qsort) 알고리즘을 사용했습니다.

 


 

소스코드 및 결과 (C)

#include <stdio.h>
#include <stdlib.h>

int num[1000001] = { 0, };

int compare(const void *a, const void *b) {
	if (*(int *)a > *(int *)b)
		return 1;
	else if (*(int *)a < *(int *)b)
		return -1;
	else
		return 0;
}

int main() {
	int N;

	scanf("%d", &N);
	for (int i = 0; i < N; i++)
		scanf("%d", &num[i]);

	qsort(num, N, sizeof(int), compare);

	for (int i = 0; i < N; i++)
		printf("%d\n", num[i]);

	return 0;
}

 

메모리 : 8924 KB

시간 : 440 ms

코드길이 : 420 B