import java.util.*;
public class Main {
public static int n;
public static int [] arr = new int[1000001];
public static int [] tmp = new int[1000001];
public static 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];
}
}
public static void merge_sort(int st, int en){
if(st+1 == en) return;
int mid = (st+en)/2;
merge_sort(st, mid);
merge_sort(mid, en);
merge(st,en);
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for(int i=0;i<n;i++){
arr[i] = sc.nextInt();
}
merge_sort(0,n);
for(int i=0;i<n;i++){
System.out.println(arr[i]);
}
}
}
[실전 알고리즘] 0x0E강 - 정렬 I
안녕하세요, 이번 시간에는 정렬을 해보려고 합니다. 정렬이라고 하면 그냥 대충 sort 함수를 가져다 쓰면 뚝딱하고 되는거 아니냐라고 생각하실 수 있는데, 사실 틀린 말은 아닙니다. 코딩테스
blog.encrypted.gg