병합 정렬 알고리즘 아이디어:
분할 - 정복; 각 재귀 프로세스에는 세 단계가 포함됩니다. 첫째, 분해: n개의 요소를 두 개의 하위 시퀀스로 분해합니다. 각 하위 시퀀스는 n/2개의 요소를 포함합니다.
둘째, 거버넌스: 각 하위 시퀀스에 대해 개별적으로 MergeSort를 호출하고 재귀 작업을 수행합니다. 셋째, 병합: 두 개의 정렬된 하위 시퀀스를 병합하여 정렬 결과를 생성합니다.
public static void mergeSort(int[] a, int[] tmp, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; mergeSort(a, tmp, left, mid);// 왼쪽 정렬 mergeSort(a, tmp, mid + 1, right);// 오른쪽 정렬 merge(a, tmp, left, mid + 1, right);// 왼쪽과 오른쪽 병합} }public static void merge(int[] a, int[] tmp, int left, int rightPos, int right) { int leftEnd = rightPos - 1 = right int tmpPos = left; 1; while (왼쪽 <= leftEnd && rightPos <= 오른쪽) { if (a[left] < a[rightPos]) { tmp[tmpPos++] = a[left++]; } else { tmp[tmpPos++] = a[rightPos++]; } } while (left <= leftEnd) { tmp[tmpPos++] = a[left++] } while (rightPos <= right) ] = a[rightPos++]; } for (int i = 0; i < num; i++, 오른쪽--) { a[right] = tmp[오른쪽] } }병합 알고리즘의 개략도:
이상이 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.