English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 튜토리얼

Java 흐름 제어

Java 배열

Java 오브젝트 지향(I)

Java 오브젝트 지향(II)

Java 오브젝트 지향(III)

Java 예외 처리

Java 목록(List)

Java 큐(큐)

Java Map集合

Java Set集合

Java 입력 출력(I/O)

Java Reader/Writer

Java 다른 주제

Java 프로그램이 병합 정렬 알고리즘을 구현

Java 예제 전체

이 예제에서는 Java에서 병합 정렬 알고리즘을 실행하는 방법을 배웁니다.

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]) {

Java 예제 전체