10. 병합정렬 (Merge Sort)

병합정렬 (Merge Sort)
public class MergeSort { public static void main(String[] args) { int[] numArr = {4, 1, 7, 3, 2, 8, 6}; int[] results = mergeSplit(numArr); System.out.println(Arrays.toString(results)); } private static int[] mergeSplit(int[] arr) { // 길이가 1개 이하 인 경우 return arr if (arr.length <= 1) return arr; // 중간 위치 값 int medium = arr.length / 2; int[] left = mergeSplit(Arrays.copyOfRange(arr, 0, medium)); int[] right = mergeSplit(Arrays.copyOfRange(arr, medium, arr.length)); return merged(left, right); // [4][1] merge [7][3] merge } private static int[] merged(int[] left, int[] right) { int lp = 0, rp = 0, mergeIdx = 0; // 투 포인터 int[] merged = new int[left.length + right.length]; // left 와 right 사이즈만큼의 배열 생성 while (left.length > lp && right.length > rp) { // 왼쪽 배열의 크기 보다 lp 가 작은 경우 and 오른쪽 배열 크기 보다 rp 가 작은 경우 if (left[lp] > right[rp]) { // 왼쪽 값이 오른쪽 값보다 큰 경우 merged[mergeIdx++] = right[rp++]; // merge 배열과 right 배열 의 index 증가 } else { merged[mergeIdx++] = left[lp++]; // merge 배열과 left 배열 의 index 증가 } } // 왼쪽 크기보다 lp 가 작은 경우 나머지 왼쪽에 있는 걸 리스트에 넣는다 while (left.length > lp) { merged[mergeIdx++] = left[lp++]; } // 오른쪽 크기보다 rp 가 작은 경우 나머지 왼쪽에 있는 걸 리스트에 넣는다 while (right.length > rp) { merged[mergeIdx++] = right[rp++]; } return merged; } }
참고
[알고리즘] Java로 구현하는 쉬운 Merge Sort (병합 정렬, 합병 정렬)
알고리즘을 시작할 때 가장 먼저 배워야 할 것은 정렬, 즉 sorting이라고 생각한다. 버블 정렬, 선택 정렬, 퀵 정렬 등 많은 정렬이 있지만, 내가 사용하는 것은 병합 정렬이다. 병합 정렬(=합병 정
yunmap.tistory.com
[Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도
정렬 별 특징 선택정렬 (Selection Sort) 선택정렬은 앞에서부터 차례대로 정렬하는 방법입니다. 먼저 주어진 리스트 중에 최소값을 찾고 그 값을 맨 앞에 위치한 값과 교체하는 방식으로 진행하
coding-factory.tistory.com
'25. 자료 구조와 알고리즘 > 나의 알고리즘' 카테고리의 다른 글
11. 이진 탐색 (Binary Search) (0) | 2021.09.21 |
---|---|
00. 배열 | 큐 | 스택 (0) | 2021.09.17 |
09. 퀵 정렬 (Quick Sort) (0) | 2021.09.16 |
07. 재귀함수 (Recursive Call) - 경우의 수 구하기 (0) | 2021.09.16 |
06. 재귀함수 (Recursive Call) - 홀수와 짝수에 따라 분기처리 (0) | 2021.09.11 |
댓글
이 글 공유하기
다른 글
-
11. 이진 탐색 (Binary Search)
11. 이진 탐색 (Binary Search)
2021.09.21 -
00. 배열 | 큐 | 스택
00. 배열 | 큐 | 스택
2021.09.17 -
09. 퀵 정렬 (Quick Sort)
09. 퀵 정렬 (Quick Sort)
2021.09.16 -
07. 재귀함수 (Recursive Call) - 경우의 수 구하기
07. 재귀함수 (Recursive Call) - 경우의 수 구하기
2021.09.16
댓글을 사용할 수 없습니다.