일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- algorithmTest
- algorithmtraining
- 독서
- C++
- 백준알고리즘
- 자바
- 자바스크립트
- 주식
- 재테크
- 알고리즘 공부
- 지혜를가진흑곰
- 서평
- C
- 채권
- 책을알려주는남자
- 화장품
- 투자
- 프로그래밍언어
- 책알남
- JavaScript
- 알고리즘공부
- 성분
- Java
- 알고리즘트레이닝
- algorithmStudy
- 프로그래머스 알고리즘 공부
- 독후감
- 경제
- 다독
- 돈
Archives
- Today
- Total
탁월함은 어떻게 나오는가?
[백준알고리즘] 2751번 수 정렬하기2 [JAVA] Merge Sort(병합 정렬)을 사용해서 풀어보자 본문
[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 |
반응형
'[Snow-ball]프로그래밍(컴퓨터) > Algorithm Training' 카테고리의 다른 글
[백준알고리즘] 1427번 소트인사이드 알고리즘 해결하기 [JAVA-자바] (0) | 2022.02.21 |
---|---|
[백준알고리즘] 10989번 수 정렬하기 3 - 계수(카운팅) 정렬 [Counting Sort] 로 풀어보자 [Java - 자바] (0) | 2022.02.18 |
[백준알고리즘] 2750번 수 정렬하기 [JAVA] Selection Sort(선택 정렬)과 Bubble Sort(버블 정렬)을 사용해서 풀어보자 (0) | 2022.02.15 |
[백준알고리즘] 1436번 영화감독 숌 [JAVA] (0) | 2022.02.15 |
[백준알고리즘] 7568번 덩치 [JAVA] (0) | 2022.02.05 |
Comments