입력 코드
#include <stdio.h>
void merge(int a[], int low, int mid, int hight) {
int b[1000000];
int i = low;
int j = mid + 1;
int k = 0;
while(i <= mid && j <= hight) {
if(a[i] <= a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
while(i <= mid)
b[k++] = a[i++];
while(j <= hight)
b[k++] = a[j++];
k--;
while(k >= 0) {
a[low + k] = b[k];
k--;
}
}
void mergeSort(int a[], int low, int hight) {
int mid;
if(low < hight) {
mid = (low + hight) / 2;
mergeSort(a, low, mid);
mergeSort(a, mid + 1, hight);
merge(a, low, mid, hight);
}
}
int main(void) {
int arr[1000000];
int i, cnt;
scanf("%d", &cnt);
for(i = 0 ; i < cnt; i++)
scanf("%d", &arr[i]);
mergeSort(arr, 0, cnt - 1);
for(i = 0; i < cnt; i++)
printf("%d ", arr[i]);
}
출처 travelerfootprint.tistory.com/82
백준 알고리즘 2751번: 수 정렬하기 2 C언어 합병 정렬(merge sort)
문제 출처: https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다..
travelerfootprint.tistory.com
코드 설명
#정렬
[C 언어] 백준 2751. 수 정렬하기 2
2751. 수 정렬하기 2 (누르면 해당 문제로 이동) 시간 복잡도가 O(nlogn) 인 정렬 알고리즘으로 풀 수 있습니다. 예를 들면 병합 정렬, 힙 정렬 등이 있지만, 어려운 알고리즘이므로 지금은 언어에 내
mjeong9316.tistory.com
↑↑↑ qsort (퀵 정렬) 알고리즘
[Baekjoon Online Judge] 백준 2751번 수 정렬하기 2(C)
[Baekjoon Online Judge] 백준 2751번 수 정렬하기 2 (C) (글쓴날 : 2020.04.02) * Baekjoon Online Judge, 백준 2751번 문제 C 언어 풀이입니다. * 소스 코드의 저작권은 글쓴이에게 있습니다. 백준 2751번..
hellominchan.tistory.com
↑↑↑ 병합정렬 알고리즘
병합정렬
codevang.tistory.com/58?category=827587
정렬알고리즘_병합정렬 [5/8]
[ 병합 정렬이란? ] 퀵정렬이 이미 정렬이 완료돼있는 경우 최악 시간 복잡도 O(n^2)을 가지는 문제를 보완 인접한 숫자 2개를 정렬하고 인접한 정렬 묶음을 다시 정렬하는 방식을 반복 수행 이미
codevang.tistory.com
문제 출처
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
'C' 카테고리의 다른 글
#58. [백준_C언어] 10814 : 나이순 정렬 (0) | 2021.01.30 |
---|---|
#57. [백준_C언어] 9012 : 괄호 (0) | 2021.01.30 |
#55. [백준_C언어] 2609 : 최대공약수와 최소공배수 (0) | 2021.01.29 |
#54. [백준_C언어] 2164 : 카드2 (0) | 2021.01.28 |
#53. [백준_C언어] 1978 : 소수 찾기 (0) | 2021.01.28 |