[학습] 병합 정렬 알고리즘

1. 알고리즘 아이디어 :

  (1)을 정렬하기 위해 배열 두 개의 재귀 정렬 된 배열로 분할

  (2) 두 개의 정렬 된 어레이 배열로 정렬 병합.

      방법 :

        가. 숫자의 두 배열의 선두를 가리키는 포인터를 제공하는 두 개의 포인터 포인트를 비교하여 작은 수는 보조 배열 순방향 포인터, 상기 오버 플로우 될 때까지 포인터를 첨가

        B. 보조 배열에 추가 나머지 요소를 오버 플로우하지 않는 배열 배치

        하였다. 전체 어레이를 배치 원래 보조 배열에 복사

2. 코드 (JAVA) :

공용  클래스 머지 소트 {
     공공  정적  무효 머지 소트 ( INT [] 도착, INT의 L, INT의 R) {
         경우 (L < R) {
             INT 중간 = 1 + (RL) / 2 ; 
            머지 소트 (도착, L, MID); 
            머지 소트 (편곡, 중간 +1 , R); 
            (도착, L, R) 병합; 
        } 
    } 
    
    공공  공극 병합 ( INT [] 도착, INT의 L, INT의 R) {
         INT [] TMP = 새로운  INT [R-L + 1 ];
        INT 중간 = 1 + (RL) / 2; INT P1 = L;
        INT P2 = 중간 + 1 ;
        int로 I = 0 ;
        반면 (P1 <P2 && = m <= R) {
             경우 (도착 [P1] < 도착 [P2]) 
                TMP [I ++]의 도착 = [(P1) ++ ];
            다른 
                TMP [I ++]의 도착 = [P2 ++ ]; 
        } 
        동안 (P1 <= m) 
            TMP [I ++ =의 도착 [P1];
        동안 (P2 <= R) 
            TMP [I ++ =의 도착 [P2];
         (I = 0; I는 <arr.length; 나는 ++) { 
            [(L)을, 언 + 난] = tmp에 [I]; 
        } 
    } 
}

 

알고리즘 3. 분석 :

  시간 복잡도 : O (N * logN)

 

  

추천

출처www.cnblogs.com/teensSpirit-code-life/p/11722514.html