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)