Sort
์ ๋ ฌ์ด๋ ๋ฌผ๊ฑด์ ํฌ๊ธฐ ์์ผ๋ก ์ค๋ฆ์ฐจ์์ด๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋์ดํ ๊ฒ์ด๋ค.
๋จ์ํ์ง๋ง ๋นํจ์จ์ : ์ฝ์ , ์ ํ, ๋ฒ๋ธ ์ ๋ ฌ
๋ณต์กํ์ง๋ง ํจ์จ์ : ํต, ํํ, ํฉ๋ณ, ๊ธฐ์ ์ ๋ ฌ
์ ํ์ ๋ ฌ(selection sort)
๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ๋งจ ์์ ์๋ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๊ณ , ๊ทธ ๋ค์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ์์์ ๋ ๋ฒ์งธ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๋ฐฉ๋ฒ

์ฃผ์ด์ง ๋ฆฌ์คํธ ์ค์ ์ต์๊ฐ์ ์ฐพ๋๋ค.
๊ทธ ๊ฐ์ ๋งจ ์์ ์์นํ ๊ฐ๊ณผ ๊ต์ฒดํ๋ค(ํจ์ค(pass)).
๋งจ ์ฒ์ ์์น๋ฅผ ๋บ ๋๋จธ์ง ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ต์ฒดํ๋ค.
๋น๊ตํ๋ ๊ฒ์ด ์์ ์๊ฐ์ ์ด๋ฃจ์ด์ง๋ค๋ ๊ฐ์ ์๋, n๊ฐ์ ์ฃผ์ด์ง ๋ฆฌ์คํธ๋ฅผ ์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฌํ๋ ๋ฐ์๋ O(n^2) ๋งํผ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์ด๋ ์ ๋ ฌํด์ผํ๋ ๋ฐ์ดํฐ ๊ฐ์๊ฐ 100๋ฐฐ ๋์ด๋๋ฉด ์ด๋ก ์ ์ผ๋ก ์ํ์๊ฐ์ 10,000๋ฐฐ ๋์ด๋๋ ๊ฒ์ด๋ค.
์ฝ์
์ ๋ ฌ(insertion sort)
์๋ฃ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด ๋ถ๋ถ๊ณผ ๋น๊ตํ์ฌ, ์์ ์ ์์น๋ฅผ ์ฐพ์ ์ฝ์ ํจ์ผ๋ก์จ ์ ๋ ฌ์ ์์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฝ์ ์ ๋ ฌ์ ํ์ํ ๋๋ง ์์น๋ฅผ ๋ฐ๊พธ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์์ ๋ ํจ์ฌ ํจ์จ์ ์ด๋ค.
๋ณต์ก๋
์ต์ ์ ๊ฒฝ์ฐ(์ด๋ฏธ ์ ๋ ฌ) : O(n)
์ต์ ์ ๊ฒฝ์ฐ(์ญ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒฝ์ฐ) : O(n^2)
๋ณดํต ์ฝ์ ์ ๋ ฌ์ด ํต ์ ๋ ฌ๋ณด๋ค ๋นํจ์จ ์ ์ด๋, ์ด๋ฏธ ์ ๋ ฌ๋์ด์๋ ๊ฒฝ์ฐ์๋ ํต์ ๋ ฌ๋ณด๋ค ๋ ๊ฐ๋ ฅํ๋ค. ๋ฐ๋ผ์ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ์ํ๋ผ๋ฉด, ์ฝ์ ์ ๋ ฌ์ ์ด์ฉํ๋ ๊ฒ์ด ๋ ์ข๋ค.
๋ฒ๋ธ์ ๋ ฌ(bubble sort)
์ธ์ ํ 2๊ฐ์ ๋ ์ฝ๋๋ฅผ ๋น๊ตํ์ฌ ์์๋๋ก ๋์ด ์์ง ์์ผ๋ฉด ์๋ก ๊ตํํ๋ค.
๋ณต์ก๋(์ต์, ํ๊ท , ์ต์ ) : O(n^2)
ํฉ๋ณ ์ ๋ ฌ(merge_sort)

๋ฆฌ์คํธ๋ฅผ ๋ ๊ฐ์ ๊ท ๋ฑํ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ ๋ถํ ๋ ๋ถ๋ถ๋ฆฌ์ํธ๋ฅผ ์ ๋ ฌํ๋ค.
์ ๋ ฌ๋ ๋๊ฐ์ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ํฉํ์ฌ ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๋ค.
๋ณต์ก๋ : O(n*log(n))
๊ธฐ์์ ๋ ฌ(Radix Sort)
๊ธฐ์ ์ ๋ ฌ์ ์ ์์ ์๋ฆฌ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฎ์ ์๋ฆฌ์๋ถํฐ ๋น๊ตํด ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์๋ฅผ ๋ค์ด 3์๋ฆฌ ์๋ผ๋ฉด 1์์๋ฆฌ, 10์์๋ฆฌ , 100์ ์๋ฆฌ ์ซ์๋ฅผ ์์๋๋ก ๋น๊ตํด์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ณต์ก๋ : O(dn) d๋ ์๋ฆฟ์
ํต์ ๋ ฌ(Quick sort)
pivot(๊ธฐ์ค๊ฐ) ์ ํ๊ธฐ
pivot๋ณด๋ค ์์ ์์๋ค์ ์ผ์ชฝ, ํฐ ์์๋ ์ค๋ฅธ์ชฝ
pivot์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐฐ์ด๊ณผ ์ค๋ฅธ์ชฝ ๋ฐฐ์ด์ ์๋ก์ด ๋ฐฐ์ด๋ก ์ ํ๊ณ ๊ฐ ๋ฐฐ์ด๊ตฌ๊ฐ์์ 1๋ฒ๊ณผ์ ์ฌ๊ท์ ๋ฐ๋ณต
์ผ๋ฐ์ ์ผ๋ก ์ฒ์ ๋๋ ๋ง์ง๋ง ์์๋ฅผ pivot์ผ๋ก ์ก๋๋ค.
์๊ฐ ๋ณต์ก๋
ํ๊ท ์ : O(nlog(n))
์ต์ ์ ๊ฒฝ์ฐ : O(N^2)
๋ฐ์ดํฐ ์
N^2(์ ํ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ)
NlogN(ํต ์ ๋ ฌ)
1,000
์ฝ 1,000,000
์ฝ 10,000
1,000,000
์ฝ 1,000,000,000,000
์ฝ 20,000,000
๋ค๋ง ํต์ ๋ ฌ์ ํ๊ท ์ ์ผ๋ก ์๊ฐ๋ณต์ก๋๊ฐ O(NlogN)์ด์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ(์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ) O(N^2)์ธ ๊ฒ์ ์ฃผ์ํด์ผํ๋ค.
ํ ์ ๋ ฌ(heap sort)
n๊ฐ์ ๋ ธ๋์ ๋ํ ์์ ์ด์งํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค. ์ด๋ ๋ฃจํธ ๋ ธ๋๋ถํฐ ๋ถ๋ ธ๋, ์ผ์ชฝ ์๋ ธ๋, ์ค๋ฅธ์ชฝ ์๋ ธ๋ ์์ผ๋ก ๊ตฌ์ฑํ๋ค.
์ต๋ ํ์ ๊ตฌ์ฑํ๋ค.
ํ๋ฒ์ ํ๋์ฉ ์์๋ฅผ ํ์์ ์ญ์ ํ๋ฉด์ ์ ์ฅํ๋ค.
ํ ์ ๋ ฌ์ด ์ต๋๋ก ์ ์ฉํ ๊ฒฝ์ฐ๋ ์ ์ฒด ์๋ฃ๊ฐ ์๋ ๊ฐ์ฅ ํฐ ๊ฐ ๋ช๊ฐ๋ง ํ์ํ ๋์ด๋ค.
๊ตฌํ
ํ๊ตฌํ์ ํ(heap)์์ ํ์ธํ ์ ์๋ค.
๋ณต์ก๋
ํ ์ญ์ ์๊ฐ O(logn)n = *O(nlogn)
๊ณ์ ์ ๋ ฌ(Count Sort)
๊ณ์ ์ ๋ ฌ์ ํน์ ํ ์กฐ๊ฑด์ด ๋ถํฉํ ๋๋ง ์ฌ์ฉํ ์ ์์ง๋ง ๋งค์ฐ ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ธ ์ํฉ์ ๊ฐ์ ํด๋ณผ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ N, ๋ฐ์ดํฐ ์ค ์ต๋๊ฐ์ด K์ผ ๋, ๊ณ์ ์ ๋ ฌ์ ์ต์ ์ ๊ฒฝ์ฐ์๋ ์ํ์๊ฐ O(N+K)๋ฅผ ๋ณด์ฅํ๋ค.
๊ณ์ ์ ๋ ฌ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฒ์๊ฐ ์ ํ๋์ด ์ ์ ํํ๋ก ํํํ ์ ์์ ๋๋ง ์ฌ์ฉํ ์ ์๋ค. ๋ง์ฝ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ฌดํํ ๋ฒ์๋ฅผ ๊ฐ์ง ์ ์๋ ์ค์ํ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ์๋ ๊ณ์ ์ ๋ ฌ์ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ์ฐจ์ด๊ฐ 1,000,000์ ๋์ง ์์ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.

๊ณ์ ์ ๋ ฌ์ ์์ ๋ชจ๋ ๋ฒ์๋ฅผ ๋ด์ ์ ์๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํด์ผํ๊ธฐ ๋๋ฌธ์, ํฌ๊ธฐ์ ์ ํ์ด ์๋ค.
์๊ฐ ๋ณต์ก๋ : O(N+K), ์ต๋๊ฐ ํฌ๊ธฐ K, ๋ฐ์ดํฐ์ N
ํ์ด์ฌ 3.7 ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๋น๊ต
๋ฐ์ดํฐ ์(N)
์ ํ ์ ๋ ฌ
ํต ์ ๋ ฌ
๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
100
0.0123
0.00156
0.00000753
1000
0.354
0.00343
0.0000365
10000
15.475
0.0312
0.000248
์ ํ ์ ๋ ฌ์ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํด ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๊ตํ์ ๋ ๋งค์ฐ ๋นํจ์จ ์ ์ด์ง๋ง, ํน์ ํ ๋ฆฌ์คํธ์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
sorted()
ํ์ด์ฌ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ sorted()๋ ํต์ ๋ ฌ ๊ณผ ๋์ ๋ฐฉ์์ด ๋น์ทํ ๋ณํฉ ์ ๋ ฌ์ ๊ธฐ๋ฐ(๋ณํฉ ์ ๋ ฌ + ์ฝ์
์ ๋ ฌ)์ผ๋ก ๋ง๋ค์ด์ก๋ค. ๋ณํฉ ์ ๋ ฌ์ ํต์ ๋ ฌ๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฌ์ง๋ง, ์ต์
์ ๊ฒฝ์ฐ์๋ O(NlogN) ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ๋ค.
๋ฆฌ์คํธ, ๋์ ๋๋ฆฌ ์๋ฃํ์ ๋ฐ์์ ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ ฌ์์ Key ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ๋ ฌํ ์ ์๋๋ฐ, key๊ฐ์ผ๋ก๋ ์ ๋ ฌ ๊ธฐ์ค์ ํ๋์ ํจ์๊ฐ ์ ๋ ฅ๋๋ค.
sort()
๋ฆฌ์คํธ ๋ณ์๊ฐ ํ๋ ์์ ๋ ๋ด๋ถ ์์๋ฅผ ๋ฐ๋ก ์ ๋ ฌํ ์๋ ์๋ค. sort() ๋ฅผ ์ด์ฉํ๋ฉด ๋ณ๋์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๊ฐ ๋ฐํ๋์ง ์๊ณ ๋ด๋ถ ์์๊ฐ ๋ฐ๋ก ์ ๋ ฌ๋๋ค.
์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํญ์ ์ต์ ์ ๊ฒฝ์ฐ์๋ ์๊ฐ๋ณต์ก๋ O(NlogN)์ ๋ณด์ฅํ๋ค.
Last updated
Was this helpful?