Sort (์ ๋ ฌ)
n๊ฐ์ ์ซ์๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ธฐ์ค์ ๋ง๊ฒ ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ์๊ณ ๋ฆฌ์ฆ
Sort ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฅ
- Selection sort
- Insertion sort
- Bubble sort
- Merge sort
- Quick sort
๊ธฐ์ด์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
ํ๊ท ์ ์ผ๋ก O(n^2)์ ์๊ฐ์ด ์์๋๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- Selection sort (์ ํ์ ๋ ฌ)
- Insertion sort (์ฝ์ ์ ๋ ฌ)
- Bubble sort (๋ฒ๋ธ์ ๋ ฌ)
๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
ํ๊ท ์ ์ผ๋ก O(nlogn)์ ์๊ฐ์ด ์์๋๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- Merge sort (๋ณํฉ์ ๋ ฌ)
- Quick sort (ํต์ ๋ ฌ)
- Heap sort (ํ์ ๋ ฌ)
Selection sort (์ ํ์ ๋ ฌ)
- ์ ์๋ฆฌ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ํด๋น ์์์ ์์๋ฅผ ๋ฃ์ ์์น๋ ์ด๋ฏธ ์ ํด์ ธ ์๊ณ , ์ด๋ค ์์๋ฅผ ๋ฃ์์ง ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ
[๊ณผ์ ]
- ์ฃผ์ด์ง ๋ฐฐ์ด ์ค์์ ์ต์๊ฐ์ ์ฐพ๋๋ค.
- ๊ทธ ๊ฐ์ ๋งจ ์์ ์์นํ ๊ฐ๊ณผ ๊ต์ฒดํ๋ค.
- ๋งจ ์ฒ์ ์์น๋ฅผ ๋บ ๋๋จธ์ง ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ต์ฒดํ๋ค.
- ํ๋์ ์์๋ง ๋จ์ ๋๊น์ง ์์ 1~3 ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
Selection sort ์๊ณ ๋ฆฌ์ฆ์ ํน์ง
์ฅ์ : ์๋ฃ ์ด๋ ํ์๊ฐ ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋๋ค.
๋จ์ : ์์ ์ฑ์ ๋ง์กฑํ์ง ์์
Python์ผ๋ก ๋ํ๋ธ Selection sort
#best : n^2
#avg : n^2
#worst : n^2
def selection_sort(arr) :
for i in range(len(arr)-1) :
min_idx = i
for j in range(i+1, len(arr)) :
if arr[j] < arr[min_idx] :
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
Insertion sort (์ฝ์ ์ ๋ ฌ)
- ์๋ฃ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด ๋ถ๋ถ๊ณผ ๋น๊ตํ์ฌ, ์์ ์ ์์น๋ฅผ ์ฐพ์ ์ฝ์ ํ๋ฉด์ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ ๋ฒ์งธ ์๋ฃ๋ถํฐ ์์ํ์ฌ ๊ทธ ์์ ์๋ฃ๋ค๊ณผ ๋น๊ตํ๋ฉฐ ์ฝ์ ์์น๋ฅผ ์ง์ ํ๋ค.
- ๋ ๋ฒ์งธ ์๋ฃ๋ ์ฒซ ๋ฒ์งธ ์๋ฃ, ์ธ ๋ฒ์งธ ์๋ฃ๋ ๋ ๋ฒ์งธ์ ์ฒซ ๋ฒ์งธ ์๋ฃ, ๋ค ๋ฒ์งธ ์๋ฃ๋ ์ธ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ฒซ ๋ฒ์งธ ์๋ฃ์ ๋น๊ตํ ํ ์๋ฃ๊ฐ ์ฝ์ ๋ ์์น๋ฅผ ์ฐพ๋๋ค. ์๋ฃ๊ฐ ์ฝ์ ๋ ์์น๋ฅผ ์ฐพ์๋ค๋ฉด ๊ทธ ์์น์ ์๋ฃ๋ฅผ ์ฝ์ ํ๊ธฐ ์ํด ์๋ฃ๋ฅผ ํ ์นธ์ฉ ๋ค๋ก ์ด๋์ํจ๋ค.
Insertion sort ์๊ณ ๋ฆฌ์ฆ์ ํน์ง
์ฅ์ : ์์ ํ ์ ๋ ฌ ๋ฐฉ๋ฒ์ด๋ฉฐ, ๋ ์ฝ๋๊ฐ ์ด๋์ ๋ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ ํจ์จ์ ์ด๋ค.
๋จ์ : ๋ ์ฝ๋์ ์์ด ๋ง๊ฑฐ๋, ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ์๋ ์ ํฉํ์ง ์๋ค.
Python์ผ๋ก ๋ํ๋ธ Insertion sort
#best : n
#avg : n^2
#worst : n^2
def insertion_sort(arr) :
for end in range(1, len(arr)) :
for i in range(end, 0, -1) :
if(arr[i-1] > arr[i]) :
arr[i-1], arr[i] = arr[i], arr[i-1]
Bubble sort (๋ฒ๋ธ์ ๋ ฌ)
- ์๋ก ์ธ์ ํ ๋ ์์๋ฅผ ๋น๊ตํ๋ฉฐ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ผ์ชฝ๋ถํฐ ์์ํ์ฌ ์ด์ํ ์๋ค์ ๋น๊ตํด ๋๊ฐ๋ค. ์์๋๋ก ๋์ด ์์ง ์์ผ๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊พผ๋ค.
- 1ํ์ ์ ์ํํ๊ณ ๋๋ฉด ๊ฐ์ฅ ํฐ ์๋ฃ๊ฐ ๋งจ ๋ค๋ก ์ด๋ํ๋ฏ๋ก 2ํ์ ์์๋ ๋งจ ๋์ ์๋ ์๋ฃ๋ ์ ๋ ฌ์์ ์ ์ธ๋๋ค. ์ด๋ฅผ ๋ฐ๋ณตํจ
Bubble sort ์๊ณ ๋ฆฌ์ฆ์ ํน์ง
์ฅ์ : ๊ตฌํ์ด ๋งค์ฐ ๊ฐ๋จํจ
๋จ์ : ํ๋์ ์์๊ฐ ๊ฐ์ฅ ์ผ์ชฝ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ธฐ ์ํด์๋ ๋ฐฐ์ด์์ ๋ชจ๋ ๋ค๋ฅธ ์์๋ค๊ณผ ๊ตํ๋์ด์ผ ํ๋ค.
Python์ผ๋ก ๋ํ๋ธ Bubble sort
#best : n^2
#avg : n^2
#worst : n^2
def bubble_sort(arr, n) :
for i in range(n-1, 0) :
for j in range(i) :
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
[ํต, ๋ณํฉ ์ ๋ ฌ]