Shell_sort.md


๊ฐœ๋…

์‚ฝ์ž…์ •๋ ฌ์„ ๋ณด์™„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ„๊ฒฉ(Gap)์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ถ€๋ถ„๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ ๋ถ€๋ถ„๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฝ์ž… ์ •๋ ฌ๋กœ ์ •๋ ฌํ•œ ํ›„ ๊ฐ„๊ฒฉ์„ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

ํŠน์ง•

  • ์‚ฝ์ž…์ •๋ ฌ์˜ ๊ฒฝ์šฐ ์ •๋ ฌ๋  ์œ„์น˜๊ฐ€ ๋จผ ์œ„์น˜์— ์žˆ๋‹ค๋ฉด ๊ทธ๋งŒํผ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋Š˜์–ด๋‚˜์ง€๋งŒ ๊ทธ์— ๋น„ํ•ด ์ตœ์ข…์œ„์น˜์— ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

  • ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋Š” ์–ด๋А ์ •๋„ ์ •๋ ฌ์ด ๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1์ด ๋˜๊ฒŒ ๋˜๋ฉด ์‚ฝ์ž…์ •๋ ฌ๋ณด๋‹ค ๋”์šฑ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค

  • ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„

์‹œ๊ฐ„๋ณต์žก๋„ O(n^2)

์˜ˆ์‹œ

shellsort

๊ตฌํ˜„

# ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
def shell_sort(arr):
    n = len(arr)
    h = n // 2
    while h > 0:
        for i in range(0, h):
            insert_sort(arr, i, n-1, h)
        h // 2
    return arr

def insert_sort(arr, first, last, h):
    i = first + h
    while i <= last:
        val = arr[i]
        pos = i
        while pos > first and arr[pos-h] > val:
            arr[pos] = arr[pos - h]
            pos -= h
        arr[pos] = val
        i += h
    

Last updated