English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 예제에서는 Java에서 병합 정렬 알고리즘을 실행하는 방법을 배웁니다.
Java의 병합 정렬 알고리즘을 배우기 전에, 병합 정렬 알고리즘의 작동 원리를 이해해야 합니다.
import java.util.Arrays; //Java의 병합 정렬 class Main { //두个子 배열 L과 M을 배열로 병합합니다 void merge(int array[], int p, int q, int r) { int n1 = q - p + 1; int n2 = r - q; int L[] = new int[n1]; int M[] = new int[n2]; //왼쪽과 오른쪽 배열을 채웁니다 for (int i = 0; i < n1; i++){ L[i] = array[p + i]; } for (int j = 0; j < n2; j++){ M[j] = array[q + 1 + j]; } //서브 배열과 메인 배열의 현재 인덱스를 유지합니다 int i, j, k; i = 0; j = 0; k = p; //L 또는 M의 어느 한쪽에 도달할 때까지, 더 큰 값을 선택합니다 //L과 M의 요소를 A[p..r]의 정확한 위치에 배치합니다. //내림차순 정렬 //if(L[i] >= <[j]) while (i < n1 && j < n2) { if (L[i] <= M[j]) { array[k] = L[i]; i++; } else { array[k] = M[j]; j++; } k++; } // L 또는 M의 요소가 다 떨어지면, // 나머지 요소를 A[p..r]에 병합합니다 while (i < n1) { array[k] = L[i]; i++; k++; } while (j < n2) { array[k] = M[j]; j++; k++; } } // 배열을 두个子 배열로 나누고, 그들을 정렬하여 병합합니다 void mergeSort(int array[], int left, int right) { if (left < right) { //m은 배열이 두个子 배열로 나뉘는 점입니다 int mid = (left + right) / 2; //每个子数组的递归调用 mergeSort(array, left, mid); mergeSort(array, mid + 1right); //정렬된 서브 배열을 병합 merge(array, left, mid, right); } } public static void main(String args[]) { //비정렬된 배열을 생성 int[] array = { 6, 5, 12, 10, 9, 1 }; Main ob = new Main(); //mergeSort() 메서드 호출 //매개변수 전달: 배열, 첫 번째 인덱스와 마지막 인덱스 ob.mergeSort(array, 0, array.length - 1); System.out.println("정렬된 배열:"); System.out.println(Arrays.toString(array)); } }
출력1
정렬되지 않은 배열: [6, 5, 12, 10, 9, 1] 정렬된 배열: [1, 5, 6, 9, 10, 12]
이곳에서 배열의 요소는 오름차순으로 정렬되었습니다. 요소를 내림차순으로 정렬하려면 merge() 메서드의 첫 번째 while 루프 내에서 코드를 변경할 수 있습니다.:
소문자 '<'을 대문자 '>'로 변경 if (L[i] >= M[j]) {