Pseudo-code ์ค๋ช
์๋ Insertion Sort(์ฝ์
์ ๋ ฌ)์ pseudo-์ฝ๋์ด๋ค. j๊ฐ 2๋ถํฐ ์์ํ๊ณ ์ด๋ list๋ด 2๋ฒ์งธ item์ ์๋ฏธํ๋ค, ์ฆ, ํ๋ก๊ทธ๋๋ฐํ ๋๋ index 1์ ์๋ฏธํ๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ list๋ฅผ iterateํ๋ฉด์ list ์ ์ชฝ๋ถํฐ ์ ๋ ฌ์ ํด๋๊ฐ๋ค. ์ ๋ ฌ์ ํ๊ณ ๋์ ๊ทธ ๋ค์ item์ผ๋ก ์ด๋ํ๊ณ ํด๋น item์ ์ ๋ ฌ๋ ์ผ์ชฝ list์ ์ ๋ ฌ๋ ์์์ ์ฝ์
์ ํ๋ค.
step๋ณ๋ก ํ์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค:
- list์ 2๋ฒ์งธ item๋ถํฐ ์์ํ๋ค. (์ฒซ๋ฒ์งธ item์ ์ด๋ฏธ ์ ๋ ฌ๋ list๋ผ๊ณ ๊ฐ์ฃผํ๋ค, item์ด ํ๋์ธ list์์ ๊ทธ item์ ํญ์ ์ ๋ ฌ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ด๋ค)
- key๋ผ๋ ๋ณ์์ list์ j๋ฒ์งธ ๊ฐ์ ์ ์ฅํ๋ค.
- i๋ผ๋ ๋ณ์์ j - 1 ๊ฐ์ ์ ์ฅํ๋ค. (list์ i๋ฒ์งธ ๊ฐ์ ์ผ์ชฝ์ ์ ๋ ฌ๋ list์ ๋น๊ต๋ฅผ ํ๋ฉฐ ์ฝ์ ํ๊ธฐ ์ํจ์ด๋ค)
-
while๋ฌธ
- key๊ฐ list[i]๋ณด๋ค ์์ผ๋ฉด list[i+1] (j์ ์์น๋ฅผ ์๋ฏธํ๋ค)์ ์ ๋ ฌ๋ list์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ณต์ฌํ๋ค.
- i -= 1 ์ ํ๊ณ 4.1๋ฒ์ ๋ฐ๋ณตํ๋ค. ๋ง์ฝ list๋งจ ์๊น์ง ๋๋ฌํ๋ฉด loop์ ์ข ๋ฃํ๋ค.
- key ๊ฐ์ list[i+1]์ ์ ์ฅํ๋ค. (์ด ๋ถ๋ถ์ด ์ ๋ ฌ๋ list์ ์๋ก์ด ์ซ์๋ฅผ ์ฝ์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ ๋ค)
- j += 1์ ํ๊ณ 2๋ฒ๋ถํฐ ๋ค์ ๋ฐ๋ณตํ๋ค.
ํ iteration์ list๋ด์ ๋ชจ๋ item์ ํ๋ฒ ์ดํด๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ iteration์ค์ ์ ํ๋ item์ ์ ๋ ฌ๋ list์์ ๋ค์ ๋น๊ตํ๋ฉฐ ์ดํด๋ณธ๋ค. ๊ทธ๋์, ์ด sorting algorithm์ ์๊ฐ ๋ณต์ก๋๋ `O(n^2)`๊ฐ ๋๋ ๊ฒ์ด๋ค.
source: geeks-for-geeks-insertion-sort
๊ทธ๋ฆผ์ ์๋ iteration ๊ณผ์ ์ ๊ฐ๋จํ ์ดํด๋ณด์
์ฒซ๋ฒ์งธ iteration์์๋ 9๋ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๊ณ , list[1]์ธ 7๊ณผ indexํ๋ ์์ 9์ ๋น๊ต๋ฅผ ํ๋ค. 7์ด ๋ ์๊ธฐ ๋๋ฌธ์ 7์ 9์์ผ๋ก ์ฝ์ ์ ํ๋ค.
๋๋ฒ์งธ iteration์์๋ [7,9]๋ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๊ณ , list[2]์ธ 6๊ณผ 9๋ฅผ ๋น๊ตํ๋ค. 9๊ฐ ๋ ํฌ๊ธฐ ๋๋ฌธ์ ํ์นธ ๋ ์ผ์ชฝ์ผ๋ก ์์ง์ฌ์ 6๊ณผ 7์ ๋น๊ตํ๋ค. ์ด๋ 6์ด ๋ ์๊ธฐ ๋๋ฌธ์ ๋งจ ์์ผ๋ก ์ฝ์ ์ ํ๋ค.
์ธ๋ฒ์งธ iteration์์๋ 15๊ฐ ์ ๋ ฌ๋ list [6,7,9] ์ค์์ ๊ฐ์ฅ ํฐ 9๋ณด๋ค๋ ํฌ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ์ด๋์ ํ์ง ์๋๋ค.
...
list์ ๋งจ ๋ง์ง๋ง item์ ์ผ์ชฝ์ ์ ๋ ฌ๋ list์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ ๋งํ ์์น์ ์ฝ์ ์ ํ๊ฒ ๋๋ฉด โ ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ์ด ๋๋ค.
Python Code
import random
def insertion_sort(num):
for j in range(1,len(num)):
key = num[j]
i = j - 1
while i>=0 and (num[i] > key): # i๊ฐ list๋งจ ์๊น์ง ์ค๋์ง, num[i]๊ฐ ์์ ์ ์ฅ๋ num[j]๋ณด๋ค ์์ผ๋ฉด loop๋น ์ ธ ๋์จ๋ค.
num[i+1] = num[i]
i -= 1
num[i+1] = key
return num
number = [i for i in range(10)]
random.shuffle(number)
print(number)
insertion = insertion_sort(number)
print(insertion)