티스토리 뷰
package Sort;
import java.util.Arrays;
public class MergeSort {
// 계속 바뀌는 배열을 바로바로 적용해야 하므로 전역변수로 넣어줌.
static int[] sorted = new int[8];
public static void merge(int a[], int m, int middle, int n) {
int i = m; // 첫 번째 부분집합의 시작 위치 설정
int j = middle+1; // 두 번째 부분집합의 시작 위치 설정
// middle 다음원소부터 j가 설정됨
// 배열은 이렇게 생김 i ~ middle j ~ n
int k = m; // sorted 배열에 정렬된 원소를 저장할 위치 설정
while(i<=middle && j<=n) {
// middle 을 기준으로 양옆의 배열에서 가장작은 값부터
// sorted 배열에 우선적으로 배치할 것이므로
// i~ middle 까지의 배열, j ~ n 까지의 배열을 서로 비교하여 작은 값을 가져옴
// 이미 정렬된 두가지 배열 {8, 58} {3, 28} 로 sorted에 배치
if(a[i]<=a[j]) { // 8보다 3이 작으므로 sorted[0]에는 3이 들어감
sorted[k] = a[i];
i++;
}else {
sorted[k] = a[j]; // j ~ n 배열에서 하나가 선택되었으므로 j 에 +1
j++;
}
k++; // sorted배열 다음 자리에 그 다음 작은 숫자의 원소 채워넣을 수 있도록 k에 +1
}
// while문에서 i가 먼저 채워졌거나 j가 먼저 채워진 경우 나머지를 채우기 위해
if(i>middle) { // j 가 먼저 채워진 경우 남은 원소를 sorted에 넣어줌
for(int t=j;t<=n;t++,k++) {
sorted[k] = a[t];
}
}else { // i 가 먼저 채워진 경우
for(int t=i;t<=middle;t++,k++) {
sorted[k] = a[t];
}
}
for(int t=m;t<=n;t++) { // sorted에 배치된 원소를 a배열에 넣어줌
a[t] = sorted[t];
}
System.out.println("병합 정렬 후: "+Arrays.toString(a));
}
public static void mergeSort(int a[], int m, int n) {
int middle;
if(m<n) {
middle = (m+n)/2;
mergeSort(a, m, middle); // 앞 부분에 대한 분할 작업 수행
mergeSort(a, middle+1, n); // 뒷 부분에 대한 분할 작업 수행
merge(a, m, middle, n); // 부분집합에 대하여 정렬과 병합 작업 수행
}
}
public static void main(String[] args) {
int[] list = {58,8,28,3,18,6,33,20};
int size = list.length;
System.out.println("정렬 수행 전: "+Arrays.toString(list));
System.out.println("-----------------병합 정렬 수행 시작------------------");
mergeSort(list, 0, size-1);
}
}
'algorithm' 카테고리의 다른 글
[입출력] 10953, 11021, 11718 (0) | 2020.04.07 |
---|---|
[입출력] 1000, 2558, 10950 (0) | 2020.04.06 |
[Algorithm] 다이나믹 프로그래밍(Dynamic programming) (0) | 2020.03.30 |
CountingSort with java (0) | 2020.01.24 |
HeapSort with java (0) | 2020.01.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- react
- 교착상태
- 인접행렬
- 재귀함수
- 클래스
- javascript
- 인접리스트
- 퀵정렬
- 최단경로
- 알고리즘
- 이진탐색
- BFS
- client side rendering
- 구조체
- C++
- 운영체제
- Stack
- dfs
- server side rendering
- 입출력장치
- Java
- stackframe
- 자료구조
- 세마포어
- 소프트웨어
- 동적프로그래밍
- 스텍
- 배열
- C
- 병행프로세스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함