본문 바로가기

Merge Sort

Cosequential Processing Cosequential Processing이란, 2개 이상의 리스트를 입력으로 받아서, 각각의 리스트에 대해 선형적인 작업을 한 뒤 단일한 하나의 출력을 내는 것을 말한다. 왜 이런 작업이 필요한 것일까? 예를 들어, 현재 사용 가능한 메모리보다 다루어야 하는 데이터가 훨씬 크다면, 어쩔 수 없이 분할된 형태로 읽어들일 수 밖에 없을 것이다. 그러나, 만약 전체 데이터에 대해 정렬 작업을 해야 한다면 이것은 복잡한 문제가 된다. 어떤 정렬 알고리즘은 데이터 전체가 메모리에 올려져 있어야 하며, 전체 데이터의 일부분만 메모리에 올려져 있는 이와 같은 경우, 그러한 알고리즘은 사용할 수 없다. 즉, 전체가 아닌, 각각의 분할에 대해 작업을 한 뒤 그것을 합쳐서 하나의 완전한 형태의 출력물을 내야 하는데, 그.. 더보기
Quick Sort and Merge Sort 퀵소트(Quick Sort)의 가장 핵심적인 것은 피벗 엘리먼트(Pivot Element)와 파티션 프로시저(Partition Procedure)이다. 피벗을 선택하고, 피벗 요소가 마지막으로 남을 때까지 계속해서 파티션을 하는 것이 전부이다. Quick Sort의 최악의 경우는 n^2이지만, 평균 수행 시간은 대단히 효율적이다. 퀵소트는 in-place 정렬이 가능한 알고리즘이다. 병합 정렬(Merge Sort)의 대략적인 흐름은 다음과 같다. Mergesort(begin, end) { mergesort(begin, mid) mergesort(mid, end) merge(begin, end) } 따라서, w(n) = w(n / 2) + w(n / 2) + Θ(n) = 2W(n / 2) + Θ(n)이며,.. 더보기