[백준/C언어] 2750번 수 정렬하기

EOH·2023년 3월 15일
0

백준

목록 보기
5/5
post-thumbnail

문제

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

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력

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


설명

버블정렬을 이용해 간단하게 해결했다.

버블정렬은 위 애니메이션처럼 거품이 꺼지는 것처럼 정렬된다고 버블 정렬이다. 원리를 간단히 말하자면 최댓값을 찾아 제일 마지막으로 넘겨주는 방식이다.
1번값과 2번값, 2번값과 3번값 .... n번값과 마지막값을 비교하면서 뒤에 있는 값이 앞에 있는 값보다 작으면 서로 순서를 바꿔준다. 이렇게하면 최댓값이 마지막 값이 되어있을 것이다.
제일 마지막 값을 빼고 마지막 앞 값까지 위 비교를 반복한다.
즉 마지막 값이 n+1이었으면 n까지만 비교를 하는 것이다.

이중반복문을 사용하고 처음부터 끝까지 검사를 여러번 해야된다. 시간복잡도가 O(n²)으로 느리지만 코드가 간단하여 자주 쓰인다.

코드

#include <stdio.h>

int main()
{
	int	n, j, i;
	int tmp, tmp_n;

	i = 0;

	scanf("%d", &n);
	int arr[n];
	tmp_n = n;

	while (i < n)
	{
		scanf("%d", &arr[i]);
		i++;
	}

	while (tmp_n > 0)
	{
		i = 0;
		j = i + 1;
		while (j < tmp_n)
		{
			if (arr[i] > arr[j])
			{
				tmp = arr[i];
				arr[i] = arr[j];
				arr[j] = tmp;
			}
			i++;
			j++;
		}
		tmp_n--;
	}

	for (int x = 0; x < n; x++)
	{
		printf("%d\n", arr[x]);
	}

	return (0);
}
profile
에-오

0개의 댓글