๐ ์ ๋ ฌ(sorting) ์ด๋?
- ์ ๋ ฌ ( sorting) : ํฌ๊ธฐ์์ผ๋ก ์ค๋ฆ์ฐจ์ (ascending order) , ๋ด๋ฆผ์ฐจ์ (descending) ์ผ๋ก ๋์ดํ๋ ๊ฒ
(์๋ก ๋น๊ต๋ง ๊ฐ๋ฅํ๋ค๋ฉด ์ ๋ ฌํ ์ ์๋ค.)
- ๋ ์ฝ๋ (record) : ์ ๋ ฌ ์์ผ์ผํ ๋์ (ํ์)
- ํ๋ (field) : ๋จ์ (์ด๋ฆ,ํ๋ฒ,์ฃผ์,์ฐ๋ฝ์ฒ)
- ํค (Key) : ๋ ์ฝ๋์ ๋ ์ฝ๋๋ฅผ ์๋ณํด์ฃผ๋ ์ญํ ์ ํ๋ ํ๋ (ํ๋ฒ)
๐ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ์ฌ
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ ํ๊ฐ ๊ธฐ์ค : ๋น๊ต ์ฐ์ฐ ํ์, ์ด๋ ์ฐ์ฐ ํ์
- 1) ๋จ์ํ์ง๋ง ๋นํจ์จ์ : ์ฝ์ ์ ๋ ฌ, ์ ํ ์ ๋ ฌ, ๋ฒ๋ธ ์ ๋ ฌ ๋ฑ (๋ฐ์ดํฐ๊ฐ ์ ์ ๋ ์ฌ์ฉ)
- 2) ๋ณต์กํ์ง๋ง ํจ์จ์ : ํต ์ ๋ ฌ, ํํ ์ ๋ ฌ, ํฉ๋ณ ์ ๋ ฌ, ๊ธฐ์ ์ ๋ ฌ ๋ฑ (๋ฐ์ดํฐ๊ฐ ๋ง์ ๋ ์ฌ์ฉ)
- 1) ๋ด๋ถ ์ ๋ ฌ : ์ ๋ ฌ ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์์์
- 2) ์ธ๋ถ ์ ๋ ฌ : ์ผ๋ถ ๋ฐ์ดํฐ๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์์์
โญ ์ ํ์ ๋ ฌ(selection sort)
- ์ ํ์ ๋ ฌ(selection sort) : ์ต์๊ฐ์ ์ฐพ์์ ์ฒซ๋ฒ์งธ ์์์ ๊ตํํ๊ณ , ์ฒซ๋ฒ์งธ ์์๋ฅผ ์ ์ธํ ๋๋จธ์ง ์์๋ค ์ค์์ ์ต์๊ฐ์ ์ฐพ์์ ๋๋ฒ์งธ ์์์ ๊ตํํ๋ ์ ๋ ฌ ๋ฐฉ๋ฒ ( ์ ๋ ฌ๋ถ๋ถ, ์ ๋ ฌ๋์ง์์ ๋ถ๋ถ )
- ์ ์๋ฆฌ ์ ๋ ฌ(in-place sorting) : ์ ๋ ฅ ๋ฐฐ์ด ์ด์ธ์ ๋ค๋ฅธ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํ์ง ์๋ ์ ๋ ฌ ๋ฐฉ๋ฒ
for i<-0 to n-2 do // n-2๊น์ง (๋ง์ง๋ง๊ฐ์ ์ ๋ ฌ ์ํด๋ ์ด๋ฏธ ํฐ ๊ฐ)
least <- A[i], A[i+1] .... , A[n-1] ์์๊ฐ ์ธ๋ฑ์ค;
A[i] ์ A[least] ๊ตํ
i++
โญ ์ฝ์ ์ ๋ ฌ (insertion sort)
- ์ฝ์ ์ ๋ ฌ (insertion sort) : ์ ๋ ฌ ๋์ง ์์ ๋ถ๋ถ์ ์ฒซ๋ฒ์งธ ์ซ์๋ฅผ ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ด๋ ์์น์ ์ฝ์ ํด์ผํ๋์ง ํ๋จํ๊ณ ์ฝ์ ํ๋ค. ์ดํ ์ ๋ ฌ๋ถ๋ถ ํฌ๊ธฐ๋ ์ฆ๊ฐํ๊ณ ์ ๋ ฌ๋์ง์์ ๋ถ๋ถ ํฌ๊ธฐ๋ ์ค์ด๋ ๋ค.( ์ ๋ ฌ๋ถ๋ถ, ์ ๋ ฌ๋์ง์์ ๋ถ๋ถ )
- ๋๋ถ๋ถ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ ๋งค์ฐ ํจ์จ์
- ์ฝ์ ์ ๋ ฌ ๋ณต์ก๋ : (์ต์ ) ์ ๋ ฅ์๋ฃ๊ฐ ์ญ์์ผ๋
for i<-1 to n-1 do
key<-A[i];
j <- i+1
while j>=0 and A[j] > key do
A[j+1] <- A[j]
j <- j+1
A[j+1] <- key
โญ ๋ฒ๋ธ ์ ๋ ฌ (bubble sort)
- ๋ฒ๋ธ ์ ๋ ฌ (bubble sort) : ์ธ์ ํ 2๊ฐ ๋ ์ฝ๋๋ฅผ ๋น๊ตํ์ฌ ํฌ๊ธฐ๊ฐ ์์๋๋ก ๋์ด ์์ง ์์ผ๋ฉด ์๋ก ๊ตํํ๋ค. ๊ฐ์ฅ ํฐ ๊ฐ์ด ๋ฆฌ์คํธ์ ์ค๋ฅธ์ชฝ ๋์ผ๋ก ์ด๋ํ๊ฒ ๋๊ณ ๊ณ์ ๋ฐ๋ณตํ๋ค. (๋น๊ต-๊ตํ ๊ณผ์ )
- ๋ฌธ์ ์ : ์์์ ๋ง์ง ์์ ์์๋ฅผ ์ธ์ ํ ์์์ ๊ตํํ๋ค, ๋ชจ๋ ๋ค๋ฅธ ์์๋ค๊ณผ ๊ตํ๋์ด์ผ ํจ.
- ๊ตํ ์์ ์ด ์ด๋ ์์ ๋ณด๋ค ๋ณต์กํด์ ์ ์ฐ์ด์ง ์์
for i<-n-1 to i do
for j<-0 to i-1 do
j์ j+1๋ฒ์งธ์ ์์๊ฐ ํฌ๊ธฐ ์์ด ์๋๋ฉด ๊ตํ
j++
i--
โญ ์ ์ ๋ ฌ (shell sort)
- ์ ์ ๋ ฌ (shell sort) : Donald L. Shell ์ด๋ผ๋ ์ฌ๋์ด ์ ์ํ ๋ฐฉ๋ฒ, ์ฝ์ ์ ๋ ฌ์ด ์ด๋์ ๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ํด์ ๋น ๋ฅธ ๊ฒ์ ๋ํ์ฌ ์ฐฉ์ํ ๋ฐฉ๋ฒ์ด๋ค. ๊ฐ๊ฒฉ(๊ฐญ)์ ๋๊ณ ์ฌ๋ฌ๊ฐ์ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ , ๊ฐ ๋ถ๋ถ๋ฆฌ์คํธ์ ์ฝ์ ์ ๋ ฌ์ ์ด์ฉํ์ฌ ์ ๋ ฌํ๋ค. ์ฒซ๋ฒ์งธ ํจ์ค๊ฐ ๋๋๋ฉด ๊ฐ๊ฒฉ์ 1/2 ์ค์ฌ์ ๋ค์ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค. ๋ถ๋ถ ๋ฆฌ์คํธ ๊ฐ์๊ฐ 1๊ฐ๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค. (๋ถ๋ถ๋ฆฌ์คํธ ์์ฑ - ๋ถ๋ถ๋ฆฌ์คํธ์ ๋ ฌ)
- ์ฅ์ : ์๋ฃ์ ๊ตํ ์ ๋ ํฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋ ๊ฐ๋ฅํ๋ค , ๋ถ๋ถ๋ฆฌ์คํธ๋ ์ด๋์ ๋ ์ ๋ ฌ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์ฝ์ ์ ๋ ฌ์ ์ํํ๋ ๊ฒ์์๋ ๋น ๋ฅด๊ฒ ์ํ๋๋ค.
- ์ฝ์ ์ ๋ ฌ๊ณผ ์ฐจ์ด์ : ์ฝ์ ์ ๋ ฌ์ ๊ฒฝ์ฐ ์์ ์ฝ์ ์, ์ด์ํ ์์น๋ก๋ง ์ด๋๋๋ค. ์ฝ์ ์์น๊ฐ ๋จผ ๊ฒฝ์ฐ ์ด๋์ด ๋ง์์ง๋ค. ํ์ง๋ง ์ ์ ๋ ฌ์ ๋ฉ๋ฆฌ ๋จ์ด์ง ์์น๋ก๋ ์ด๋์ด ๊ฐ๋ฅํ๋ค.
โญ ํฉ๋ณ ์ ๋ ฌ (merge sort)
- ํฉ๋ณ ์ ๋ ฌ (merge sort) : ํ๋์ ๋ฆฌ์คํธ๋ฅผ ๋๊ฐ์ ๊ท ๋ฑํ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ ๋ถํ ๋ ๋ถ๋ถ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋ค์, ๋ ๊ฐ์ ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ํฉํ๋ค. (๋ถํ ์ ๋ณต๊ธฐ๋ฒ ๋ฐํ์ ๋๊ณ ์๋ค.)
- Divide -> Conquer -> Combine
- ๋ถํ ์ ๋ณต ๊ธฐ๋ฒ (divide and conquer) : ๋ฌธ์ ๋ฅผ ์์ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ๊ฐ์ ํด๊ฒฐํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ์๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ ๋ต.
- ์ฅ์ : ์์ ์ ์ธ ์ ๋ ฌ ๋ฐฉ๋ฒ, ๋ฐ์ดํฐ ๋ถํฌ์ ์๊ด ์์ด ์ ๋ ฌ ์๊ฐ์ ๋์ผํ๋ค. ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ ๋ ฌ๋ณด๋ค ํจ์จ์ ์ผ ์ ์์
- ๋จ์ : ์์ ๋ฐฐ์ด์ด ํ์ํจ
if left < right
mid = left+right / 2
merge_sort(list, left, mid)
merge_sort(list, mid+1, right)
merge(list, left, mid, right)
โญ ํต ์ ๋ ฌ (quick sort)
- ํต ์ ๋ ฌ (quick sort) : ํฉ๋ณ ์ ๋ ฌ๊ณผ ๋น์ทํ๊ฒ ์งํ๋๋ค ํ์ง๋ง ํต์ ๋ ฌ์ ๋ฆฌ์คํธ๋ฅผ ๋น๊ท ๋ฑํ๊ฒ ๋ถํ ํ๋ค. ๋จผ์ ํ ์์๋ฅผ ํผ๋ฒ (pivot) ์ผ๋ก ์ ํํ๊ณ ํผ๋ฒ๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ, ํฌ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค. ์ค๋ฅธ์ชฝ,์ผ์ชฝ ๋ถ๋ถ ๋ฆฌ์คํธ๋ค์ ๋ค์ ํต์ ๋ ฌ๋ก ๋ํ์ดํ๊ณ ๋ถํ ์ด ๋ถ๊ฐ๋ฅํ ๋๊น์ง ์งํํด์ค๋ค. (๋ถํ ์ ๋ณต๊ธฐ๋ฒ ๋ฐํ์ ๋๊ณ ์๋ค.)
- ์๊ฐ ๋ณต์ก๋ : O(nlog2n) : ๋ถํ์ํ ๋ฐ์ดํฐ ์ด๋์ ์ค์, ๋จผ๊ฑฐ๋ฆฌ ๋ฐ์ดํฐ ๊ตํ ๊ฐ๋ฅ, ํ๋ฒ ๊ฒฐ์ ๋ ํผ๋ฒ๋ค์ ์ถํ ์ฐ์ฐ์์ ์ ์ธ๋๋ ํน์ฑ
- ์ฅ์ : ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ, ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ์์์
- ๋จ์ : ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ ๋ํด์ ์ํ์๊ฐ์ด ๋ ๋ง์ด ๊ฑธ๋ฆผ
- ์ค๊ฐ ๊ฐ ์ ํ ๋ฐฉ๋ฒ (median of three) : ๋ถ๊ท ํ ๋ถํ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ผ์ชฝ,์ค๊ฐ,์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ ์ค ์ค๊ฐ ๊ฐ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ง์ด ์ฌ์ฉํ๋ค.
โญ ํํ ์ ๋ ฌ (heap sort)
- ํํ ์ ๋ ฌ (heap sort) : ์ ๋ ฌํ ๋ฐฐ์ด์ ์ต์ ํํ๋ก ๋ณํํ์ฌ ๊ฐ์ฅ ์์ ์์๋ถํฐ ์ฐจ๋ก๋๋ก ์ถ์ถํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ. ์ต์ํํ๋ฅผ ๋ง๋ค๊ณ ์ซ์๋ฅผ ์ฐจ๋ก๋๋ก ์ฝ์ ํ ๋ค์ ์ต์๊ฐ ๋ถํฐ ์ญ์ ํ๋ฉด ๋๋ค.
- ์ต์ํํ : ์์์ ๊ฐ์ ๋งํผ ์ญ์ ์ฐ์ฐ์ ์ํํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ์ต๋ํํ : ์์์ ๊ฐ์ ๋งํผ ์ญ์ ์ฐ์ฐ์ ์ํํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ (๋ฐฐ์ด์ ๋ค์ชฝ๋ถํฐ ์ ์ฅ)
- ํํ : ์ฐ์ ์์ ํ๋ฅผ ์์ ์ด์งํธ๋ฆฌ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- MAX HEAP = ์ต๋ ํํ ๋ฃจํธ ๋ ธ๋(ํค๊ฐ)๊ฐ ๊ฐ์ฅ ํผ
- MIN HEAP = ์ต์ ํํ ๋ฃจํธ ๋ ธ๋(ํค๊ฐ)๊ฐ ๊ฐ์ฅ ์์
โญ ๊ธฐ์ ์ ๋ ฌ (radix sort)
- ๊ธฐ์ ์ ๋ ฌ (radix sort) : ๋ ์ฝ๋๋ฅผ ๋น๊ตํ์ง ์๊ณ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ, ๊ธฐ์(radix) ์ซ์์ ์๋ฆฌ์, ์๋ฆฌ์ ๊ฐ์ ๋ฐ๋ผ์ ์ ๋ ฌํ๋ค. ์ญ์ง์์ ๊ฐ ์๋ฆฌ ์๋ 0~9 ๋ง ๊ฐ์ง๋ฏ๋ก 10๊ฐ์ ๋ฒํท์ ๋ง๋ค์ด์ ๊ฐ ์๋ฆฌ์์ ๊ฐ์ ๋ฐ๋ผ ์์์ ๋ฃ๊ณ ๋ฒํท ์์ ๋ค์ด์๋ ์ซ์๋ฅผ ์์๋๋ก ์ฝ์ผ๋ฉด ์ ๋ ฌ๋ ์ซ์๋ฅผ ์ป์ ์ ์๋ค. (๋ค๋จ๊ณ ์ ๋ ฌ, ๋จ๊ณ์ ์๋ ๋ฐ์ดํฐ์ ์๋ฆฌ์์ ๊ฐ์์ ์ผ์นํ๋ค.)
- ์ฅ์ : ๋น ๋ฅธ ์ํ์๊ฐ, ๋น๊ต ์ฐ์ฐ์ ํ์ง ์์
- ๋จ์ : ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ํ์ , ํค๊ฐ์ด ์ซ์๋ก ํํ๋์ด์ผ๋ง ๊ฐ๋ฅํ๋ค.
๐ ์ ๋ ฌ ๋น๊ต
ํต ์ ๋ ฌ >ํฉ๋ณ์ ๋ ฌ>ํํ์ ๋ ฌ>์์ ๋ ฌ>> ์ฝ์ ์ ๋ ฌ>์ ํ์ ๋ ฌ> ๋ฒ๋ธ์ ๋ ฌ