[Snow-ball]프로그래밍(컴퓨터)/Algorithm Training
[백준알고리즘] 2751번 수 정렬하기2 [JAVA] Merge Sort(병합 정렬)을 사용해서 풀어보자
Snow-ball
2022. 2. 16. 18:54
반응형
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 <= N <= 1,000,000)이 주어진다. 둘째 줄 부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
package com.company.sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class arrangeTheNumber_mergeSort {
static int N;
static int[] sorted, resultArr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
mergeSort(arr, 0, N - 1);
for (int i = 0; i < N; i++) {
System.out.print(arr[i] + " ");
}
}
static void mergeSort(int arr[], int m, int n) {
if (m < n) {
int middle = (m + n) / 2;
mergeSort(arr, m, middle);
mergeSort(arr, middle + 1, n);
merge(arr, m, middle, n);
}
}
static void merge(int arr[], int m, int middle, int n) {
int i = m;
int j = middle + 1;
int k = m;
sorted = new int[N];
// 작은 순서대로 배열에 삽입
while(i <= middle && j <= n) {
if (arr[i] <= arr[j]) {
sorted[k] = arr[i];
i++;
}
else {
sorted[k] = arr[j];
j++;
}
k++;
}
// 남은 데이터도 삽입
if (i > middle) {
for (int z = j; z <= n; z++) {
sorted[k] = arr[z];
k++;
}
}
else {
for (int z = i; z <= middle; z++) {
sorted[k] = arr[z];
k++;
}
}
// 정렬된 배열을 삽입
for (int z = m; z <= n; z++) {
arr[z] = sorted[z];
}
}
}
|
cs |
베타존 : 네이버쇼핑 스마트스토어
나를 꾸미다 - 인테리어소품 베타존
smartstore.naver.com
반응형