-
2751번. 수 정렬하기 2IT Tech/PS 2020. 11. 30. 23:58
수 정렬하기 2 성공분류
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력
5
5 4 3 2 1
예제 출력
1 2 3 4 5
#include<iostream> #include<vector> #include<algorithm> using namespace std; int n = 0; int arr[1000001]; int tmp[1000001]; void merge(int st, int en) { // ... int mid = (st + en) / 2; int lidx = st; int ridx = mid; for (int i = st; i < en; i++) { if (ridx == en) tmp[i] = arr[lidx++]; else if (lidx == mid) tmp[i] = arr[ridx++]; else if (arr[lidx] <= arr[ridx]) tmp[i] = arr[lidx++]; else tmp[i] = arr[ridx++]; } for (int i = st; i < en; i++) arr[i] = tmp[i]; } void merge_sort(int st, int en) { if (en - st == 1) return; int mid = (st+en)/2; merge_sort(st, mid); merge_sort(mid, en); merge(st, en); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for (int i = 0; i < n; i++) cin >> arr[i]; merge_sort(0, n); for (int i = 0; i < n; i++) cout << arr[i] << '\n'; return 0; }
바킹독 강의를 듣고 따라 만들어 본 것이다.
머지소트를 이용했고
머지소트는 O(NlogN) 시간복잡도를 가진다.
퀵 소트는 O(NlogN) 을 가지고 평균적으로 가장 빠르지만 최악의 경우, O(N^2)을 가질 수도 있는 위험이 있다.
반응형'IT Tech > PS' 카테고리의 다른 글
2480번. 주사위 세개 (0) 2020.12.02 2752번. 세수정렬 (0) 2020.12.01 11728번. 배열 합치기 (0) 2020.11.30 4948번. 베르트랑 공준 (0) 2020.11.09 1929번. 소수 구하기 (0) 2020.11.05