라이브러리 정렬

라이브러리 정렬(library sort, 라이브러리 소트, gapped insertion sort)은 삽입 정렬을 사용하지만 차후의 삽입 속도를 빠르게 하기 위해 배열에 간격을 두는 정렬 알고리즘의 하나이다.

라이브러리 정렬
분류정렬 알고리즘
자료 구조배열
최악 시간복잡도
최선 시간복잡도
평균 시간복잡도
공간복잡도

이 알고리즘은 2004년 마이클 A. 벤더, Martin Farach-Colton, 미구엘 모스테이로에 의해 제안되었으며[1] 2006년 출판되었다.[2]

기반을 둔 삽입 정렬처럼 라이브러리 정렬은 안정 비교 정렬에 속하며 온라인 알고리즘으로 수행할 수 있다. 그러나 삽입 정렬의 O(n2)보다 퀵 정렬에 맞먹는 O(n log n)의 실행 시간을 보일 가능성이 높은 것으로 입증되었다. 이러한 개선을 위해 사용되는 구조는 스킵 리스트의 것과 매우 비슷하다.

구현 편집

의사 코드 편집

proc rebalance(A, begin, end)
    r ← end
    w ← end * 2
    while r >= begin
        A[w+1] ← gap
        A[w] ← A[r]
        r ← r - 1
        w ← w - 2
proc sort(A)
    n ← length(A)
    S ← new array of n gaps
    for i ← 1 to floor(log2(n) + 1)
        for j ← 2^i to 2^(i+1)
            ins ← binarysearch(A[j], S, 2^(i-1))
            insert A[j] at S[ins]

각주 편집

  1. Bender, Michael A.; Farach-Colton, Martín; Mosteiro, Miguel A. (2004년 7월 1일). “Insertion Sort is O(n log n)”. arXiv:cs/0407003. 
  2. Bender, Michael A.; Farach-Colton, Martín; Mosteiro, Miguel A. (June 2006). “Insertion Sort is O(n log n)” (PDF). 《Theory of Computing Systems》 39 (3): 391–397. arXiv:cs/0407003. doi:10.1007/s00224-005-1237-z. 2017년 9월 8일에 원본 문서 (PDF)에서 보존된 문서. 2019년 11월 20일에 확인함. 

외부 링크 편집