2010-11-29 4 views
0

"Introduction to Algorithms"에서 병합 정렬 알고리즘은 MERGE(A, p, q, r)이라는 도우미 함수로 구현되어 이전에 두 개의 정렬 된 시퀀스를 병합합니다.병합 정렬 : 추가 배열 복사본이 필요합니까?

이 함수는 두 개의 추가 배열 LR을 도입합니다.

MERGE(A, p, q, r) 
1 n1 ← q − p + 1 
2 n2 ←r − q 
3 create arrays L[1 . . n1 + 1] and R[1 . . n2 + 1] 
..... 

"create arrays L[1 . . n1 + 1] and R[1 . . n2 + 1]" 나는 둘 다에 대해 추가 메모리를 할당하는 것으로 알고 있습니다.

이 함수를 다시 쓰면 추가 메모리가 필요없고 A에 직접 작업 할 수 있습니까?

답변

2

확실히. 현재 위치 병합 정렬이라고합니다.

Wikipedia은 복잡하다고 말하지만 항상 그렇지는 않습니다. Someothers과 같이 복잡하지 않으며 don't care about the run-time 인 경우

몇 가지 차이가 ​​있으며 일부는 안정적이며 일부는 불안정합니다. 몇 가지 예는 NIST DIAGS의 '구현'섹션을 참조하십시오.

+0

이 질문도 참조하십시오. http://stackoverflow.com/questions/2571049/how-to-sort-in-place-using-the-merge-sort-algorithm –

1

예,이 자리에서라고 종류의 병합하지만 Wikipedia로두고 :

(예, 오히려 배열에 비해 목록 사용)하지만 매우 복잡, 그리고 것은 조금을 제공합니다 자리에서이 가능 정렬 알고리즘이 O (n log n) 시간에 실행 되더라도 실제로 성능이 향상됩니다. (Katajainen, Pasanen & Teuhola 1996)