반응형
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
import java.io.*;
import java.util.*;
public class Main{
public static int[] arr, tmp;
public static long result;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
arr = new int[num+1];
tmp = new int[num+1];
for(int i=1; i<=num; i++){
arr[i] = Integer.parseInt(br.readLine());
}
merget_sort(1, num);
for(int i=1; i<=num; i++){
bw.write(arr[i] + "\n");
}
bw.flush();
bw.close();
}
private static void merget_sort(int start, int end){
if(end - start < 1)
return;
int middle = start + (end - start) / 2;
merget_sort(start, middle);
merget_sort(middle+1, end);
for(int i=start; i<=end; i++){
tmp[i] = arr[i];
}
int k = start;
int index1 = start;
int index2 = middle + 1;
while(index1 <= middle && index2 <= end){
if(tmp[index1] > tmp[index2]){
arr[k] = tmp[index2];
k++;
index2++;
} else{
arr[k] = tmp[index1];
k++;
index1++;
}
}
while(index1 <= middle){
arr[k] = tmp[index1];
k++;
index1++;
}
while(index2 <= end){
arr[k] = tmp[index2];
k++;
index2++;
}
}
}
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[Java] 11724 연결 요소의 개수 (2) | 2023.04.29 |
---|---|
[Java] 10989 수 정렬하기 3 (0) | 2023.04.28 |
[Java] 11004 K번째 수 (0) | 2023.04.26 |
[Java] 11399 ATM (0) | 2023.04.25 |
[Java] 1427 소트인사이드 (0) | 2023.04.23 |