2024. 1. 15. 20:58ใCS - Roadmap.sh/3. Common Algorithms
CS - 3. Common Algorithms - 3.1. Sorting - 3.1.3 Insertion Sort
๐กInsertion sort is a simple sorting algorithm that builds the final sorted array one item at a time by comparisons. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort.
์ฝ์ ์ ๋ ฌ์ ๋น๊ต๋ฅผ ํตํด ํ ๋ฒ์ ํ ํญ๋ชฉ์ฉ ์ต์ข ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๊ตฌ์ถํ๋ ๊ฐ๋จํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํต ์ ๋ ฌ, ํ ์ ๋ ฌ ๋๋ ๋ณํฉ ์ ๋ ฌ๊ณผ ๊ฐ์ ๊ณ ๊ธ ์๊ณ ๋ฆฌ์ฆ์ ๋นํด ํฐ ๋ชฉ๋ก์์๋ ํจ์จ์ฑ์ด ํจ์ฌ ๋จ์ด์ง๋๋ค.
์ฝ์ ์ ๋ ฌ(Insertion Sort)๋ ๊ฐ ์ซ์๋ฅผ ์ ์ ํ ์์น์ '์ฝ์ 'ํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์ฃผ์ด์ง ๋ฐฐ์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋์ด, ํ๋๋ ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ์์ง ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
์ฝ์ ์ ๋ ฌ์ ๋์ ๊ณผ์ ์ ์ด๋ ์ต๋๋ค.
1. ๋ฐฐ์ด์ ์ฒซ ๋ฒ์จฐ ์์๋ ์ด๋ฏธ ์ ๋ ฌ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
2. ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์ ์ฒซ ๋ฒ ์จฐ ์์๋ฅผ ์ ํํ๊ณ , ์ด๋ฏธ ์ ๋ ฌ๋ ๋ถ๋ถ์์ ์ด ์์๋ณด๋ค ํฐ ์์๋ค์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์นธ ์ฉ ์ด๋์ํต๋๋ค.
3. ์ด๋ ๊ฒ ํด์ ๋น ์๋ฆฌ๊ฐ ์๊ธฐ๋ฉด, ์ ํํ ์์๋ฅผ ๊ทธ ์๋ฆฌ์ ์ฝ์ ํฉ๋๋ค.
4. ์ด ๊ณผ์ ์ ๋ฐฐ์ด์ ๋ชจ๋ ์์๊ฐ ์ ๋ ฌ๋ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
In Python
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
์ฝ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ ์ต์ ์ ๊ฒฝ์ฐ O(n^2)์ ๋๋ค.
์ด๋ฏธ ๊ฑฐ์ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ๋์ํ๋ฉฐ, ์ด ๊ฒฝ์ฐ์๋ ๊ฑฐ์ O(n)์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค.
์ ๊ทธ๋ด๊น์?
๋ฐฐ์ด์ด ์ด๋ฏธ ๊ฑฐ์ ์ ๋ ฌ๋ ์ํ๋ผ๋ฉด, ๊ฐ ์์๋ฅผ ์ ์ ํ ์์น์ ์ฝ์ ํ๋๋ฐ ํ์ํ ๋น๊ต ํ์๊ฐ ๋งค์ฐ ์ ์ด์ง๋๋ค.
์ ํํ๊ฒ ์ดํดํ๋ ค๋ฉด, ์ฝ์ ์ ๋ ฌ์ ๋์ ๋ฐฉ์์ ์๊ฐํด๋ณด๋ฉด ๋ฉ๋๋ค.
๋๋ถ๋ถ์ ์์๊ฐ ์ด๋ฏธ ์ ์ ํ ์์น์ ์์ผ๋ฏ๋ก, ์ฝ์ ํ ์์น๋ฅผ ์ฐพ๊ธฐ ์ํ ๋น๊ต์๊ฐ ํจ์ฌ ์ ์ด O(n)์ ๊ฐ๊น์์ง๋ค๋ ๊ฒ.
'CS - Roadmap.sh > 3. Common Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3.1. Sorting - 3.1.6 Merge Sort (0) | 2024.01.20 |
---|---|
3.1 Sorting - 3.1.5 Quick Sort (0) | 2024.01.16 |
3.1 Sorting - 3.1.4 Heap Sort (0) | 2024.01.15 |
3.1. Sorting - 3.1.2 Selection Sort (1) | 2024.01.14 |
3.1. Sorting - 3.1.1 Bubble sort (1) | 2024.01.13 |