Shell_sort.md
๊ฐ๋
์ฝ์ ์ ๋ ฌ์ ๋ณด์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ๊ฐ๊ฒฉ(Gap)์ผ๋ก ๋๋์ด ๋ถ๋ถ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ๊ฐ ๋ถ๋ถ๋ฆฌ์คํธ๋ฅผ ์ฝ์ ์ ๋ ฌ๋ก ์ ๋ ฌํ ํ ๊ฐ๊ฒฉ์ ์ ๋ฐ์ผ๋ก ์ค์ฌ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํน์ง
์ฝ์ ์ ๋ ฌ์ ๊ฒฝ์ฐ ์ ๋ ฌ๋ ์์น๊ฐ ๋จผ ์์น์ ์๋ค๋ฉด ๊ทธ๋งํผ ์๊ฐ๋ณต์ก๋๊ฐ ๋์ด๋์ง๋ง ๊ทธ์ ๋นํด ์ต์ข ์์น์ ์์ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
๋ถ๋ถ ๋ฆฌ์คํธ๋ ์ด๋ ์ ๋ ์ ๋ ฌ์ด ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ถ ๋ฆฌ์คํธ์ ๊ฐ์๊ฐ 1์ด ๋๊ฒ ๋๋ฉด ์ฝ์ ์ ๋ ฌ๋ณด๋ค ๋์ฑ ๋น ๋ฅด๊ฒ ์ํ๋๋ค
๊ฐ๋จํ ๊ตฌํ
์๊ฐ๋ณต์ก๋ O(n^2)
์์

๊ตฌํ
# ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
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