์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์์ฝ์ ๋ฆฌ
๐ ๋ค์ด๊ฐ๋ฉฐ
๊ธฐ์ ๋ฉด์ ์ ๋๋นํ๊ธฐ ์ํด ๊ณต๋ถ๋ฅผ ํ๋์ค, ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ดํ ์ง๋ฌธ์ด ์์๋๋ฐ ์ฝ๊ฒ ๋ต๋ณํ์ง ๋ชปํ๋ค. ๋ถ๋ช ์ฝ๋ฉํ ์คํธ ์ค๋น๋ฅผ ํ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ดํด๋ณด๊ณ ๊ตฌํํด๋ณด์์๋๋ฐ ๊ธฐ๋ก์ผ๋ก ๋จ๊ฒจ๋์ง ์์ผ๋ ํ๋ฐ๋ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ ๊ธฐํ์ ๊ธฐ๋ณธ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋ํด ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ?
๋จผ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ ๋ชฉ๋ก ์์ ์ ์ฅ๋ ์์๋ค์ ํน์ ํ ์์๋๋ก ์ฌ๋ฐฐ์นํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ปํ๋ค.
ํจ์จ์ ์ธ ์ ๋ ฌ์ ์ํด ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๋ค๊ณ ํ ์ ์๋ค.
์ ๋ ฌ์ ๊ณ ๋ คํ ์ฌํญ์ผ๋ก๋ ์๊ฐ ๋ณต์ก๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์์ ์ฑ(safety๊ฐ ์๋๋ผ stable -> ๋ฐ์ดํฐ์ ์์๊ฐ ๋ฐ๋์ง ์๋๋ ์ฌ๋ถ ๋ฌธ์ ) ๋ฑ์ด ์๋ค.
๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด ์ต์ ์ ์ ๋ต์ ๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ผ๋ฏ๋ก ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํน์ฑ์ ๋ํด ์ ์์๋๊ณ ์ ์ ํ ์ํฉ์ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ ํํด์ผํ๋ค.
๊ธฐ์ด์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ 5๊ฐ์ ๋ํด ์ดํด๋ณด์.
๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort)
๋ฒ๋ธ์ ๋ ฌ์ ์๋ก ์ธ์ ํด ์๋ ์์ ๊ฐ์ ๋์ ๋น๊ต๋ฅผ ํตํด ์ ๋ ฌํ๋ค.
๋ฒ๋ธ ์ ๋ ฌ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ๋จ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋จ์ํ ๋งํผ ๋นํจ์จ์ ์ด๋ค.
์๊ฐ ๋ณต์ก๋๊ฐ ์ต๊ณ , ํ๊ท , ์ต์
๋ชจ๋O(n^2)
์ด๋ฉฐ ๊ณต๊ฐ๋ณต์ก๋๋ ํ๋์ ๋ฐฐ์ด๋ง ์ฌ์ฉํ๋ฏ๋ก O(n)
์ด๋ค.
๋์ ๋ฐฉ์์ ์ธ์ ํ ๋ ์์๊ฐ์ ๋์ ๋น๊ต๋ฅผ ์งํํ๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๋ฐฐ์ด์ ์์ ๊ฐ์๋งํผ ๋ฐ๋ณตํ๋ฉด์, ๊ฐ ๋ฐ๋ณต์ ์ธ์ ์์๋ฅผ ๋น๊ตํด ๋ฐ๊พธ์ด์ฃผ๋๊ฒ์ด๋ค. ๋ฐ๋ณต์๋ง๋ค ๊ฐ์ฅ ํฐ ์์๋ ๋ง์ง๋ง์ ์์นํ๊ฒ ๋๋ฏ๋ก ์ ์ธํ๋ฉด์ ๋ฐ๋ณตํ๋ค.
1 | const swap = (arr, i, j) => { |
์ฝ์ ์ ๋ ฌ(Insertion Sort)
์ฝ์
์ ๋ ฌ์ด๋ ์ ๋ ฌ์ ์งํํ ์์์ index๋ณด๋ค ๋ฎ์ ๊ณณ์ ์๋ ์์๋ค์ ํ์ํ๋ฉฐ ์๋ง์ ์์น์ ์ฝ์
ํด์ฃผ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์๊ณ ๋ฆฌ์ฆ์ด ๋์ํ๋ ๋์ ๊ณ์ํด์ ์ ๋ ฌ์ด ์งํ๋๋ฏ๋ก ๋ฐ๋์ ๋งจ ์ผ์ชฝ index๊น์ง ํ์ํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ชจ๋ ์ ๋ ฌ๋์ด ์๋ Optimalํ ๊ฒฝ์ฐ ๋ชจ๋ ์์๊ฐ ํ ๋ฒ์ฉ๋ง ๋น๊ต๋๋ฏ๋ก O(n)
์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ ๊ณต๊ฐ๋ณต์ก๋๋ ํ๋์ ๋ฐฐ์ด๋ง ์ฌ์ฉํ๋ฏ๋ก O(n)
์ด๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ฒซ ๋ฒ์งธ for๋ฌธ์ ์ ๋ ฌํ ์์๋ฅผ ์ฐจ๋ก๋๋ก ์ ํํ๋ ๊ฒ์ด๋ฉฐ, ๋ ๋ฒ์งธ for๋ฌธ์ ์ ๋ ฌํ ์์๋ณด๋ค ์๋ ์ธ๋ฑ์ค์ ์๋ ์์์ ๋น๊ตํ๋ ๊ฒ์ด๋ค.
1 | const swap = (arr, i, j) => { |
์ ํ ์ ๋ ฌ(Selection Sort)
์ ํ ์ ๋ ฌ์ด๋ ๋ฐฐ์ด์์ ์ต์๊ฐ์ ๋ฐ๋ณต์ ์ผ๋ก ์ฐพ์ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์๊ฐ๋ณต์ก๋ ์ต์ , ํ๊ท , ์ต์
๋ชจ๋ O(n^2)
์ ํด๋นํ๋ ๋นํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๋ ฌ ์ฌ๋ถ์ ์๊ด์์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋ถ ํ์ธํ๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๋ฐฐ์ด์์ ์ต์๊ฐ์ ์ฐพ์ ๋งจ ์์ ๊ฐ๊ณผ ๋ฐ๊พผ๋ค. ๋ฐ๊ฟ์ค ๋งจ ์ ๊ฐ์ ์ ์ธํ๊ณ ๊ฐ์ ๋ฐฉ๋ฒ์ ๋ฐ๋ณตํ๋ค.
1 | const swap = (arr, i, j) => { |
๋ง๋ถ์ฌ ์ ํ ์ ๋ ฌ์ ํฌ๊ฒ 2๊ฐ์ง๋ก ์ต์ ์ ํ ์ ๋ ฌ๊ณผ, ์ต๋ ์ ํ ์ ๋ ฌ์ด ์๋ค.
์ต์ ์ ํ ์ ๋ ฌ์ ์์ฒ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ด๊ณ ์ต๋ ์ ํ ์ ๋ ฌ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ด๋ค.
ํต ์ ๋ ฌ (Quick Sort)
ํต ์ ๋ ฌ์ ๋ถํ ์ ๋ณต๋ฒ๊ณผ ์ฌ๊ท๋ฅผ ์ฌ์ฉํด ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ํ์ด์ฌ์ด๋ ์๋ฐ์์ ์ธ์ด์์ ์์ฒด ๋ด์ฅ๋์ด ์๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ ํต ์ ๋ ฌ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
์๊ฐ ๋ณต์ก๋์ ๊ฒฝ์ฐ ์ต์ ๊ณผ ํ๊ท ์ผ ๋ O(nlogn)
์ด๋ฉฐ ์ต์
์ ๊ฒฝ์ฐ์๋ O(n^2)
์ด๋ค.
๊ณต๊ฐ ๋ณต์ก๋์ ๊ฒฝ์ฐ ์ ๋ ฌ๋ ์์๋ฅผ ๋ด์ ๋ฐฐ์ด์ด ํ๋ ํ์๋ก ํ๋ฏ๋ก O(n)
์ด๋ค.
ํต ์ ๋ ฌ์๋ ํผ๋ด(Pivot)์ด๋ผ๋ ๊ฐ๋
์ด ์ฌ์ฉ๋๋ค. ํผ๋ด์ ํ ๋ง๋๋ก ์ ๋ ฌ ๋ ๊ธฐ์ค ์์๋ฅผ ๋ปํ๋ค.
ํผ๋ด ์ ํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํต ์ ๋ ฌ์ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง๋๋ฐ ์ต์ ์ ํผ๋ด ์ ํ์ด ์ด๋ ค์ ๋ณดํต ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ด๋ ์ค์ ๊ฐ์ ์ ํํ๋ค.
ํต ์ ๋ ฌ์ ๋์๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค. ๊ฐ๋ น ์๋ฅผ ๋ค์ด ๋ฐฐ์ด [29, 10, 14, 37, 1, 40]์ด ์๊ณ , ํผ๋ด์ ์์๋ก 29๋ฅผ ์ ํํ๋ค ๊ฐ์ ํ์.
์ดํ 4๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ๊ฒ์ ์ผ์ชฝ์ผ๋ก ํฐ ๊ฒ์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ด [10, 14, 1] < 29 < [37, 40]์ ์์ฑํ๋ค.
๋ค์ ์ผ์ชฝ์์๋ถํฐ ์์์ ํผ๋ด 10์ ์ค์ ํ์ฌ [1] < 10 < [14]๋ฅผ ์์ฑํ๊ณ ์ค๋ฅธ์ชฝ์์ ์์์ ํผ๋ด 37์ ์ค์ ํ์ฌ 37 < [40]์ผ๋ก ๋๋๋ค.
๋ง์ฝ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1์ด๋ผ๋ฉด ์ ๋ ฌ์ด ์๋ฃ๋ ๊ฒ์ด๋ฏ๋ก ๋ถํ ๋ ๋ฐฐ์ด์ ํฉ์ณ์ค๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1 | const quickSort = (arr) => { |
๋ณํฉ ์ ๋ ฌ(Merge Sort)
๋ณํฉ ์ ๋ ฌ์ ๋ถํ ์ ๋ณต๊ณผ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์๊ฐ ๋ณต์ก๋์ ๊ฒฝ์ฐ ์ต์ , ํ๊ท , ์ต์
๋ชจ๋ O(nlogn)
์ด๋ฉฐ ๊ณต๊ฐ ๋ณต์ก๋์ ๊ฒฝ์ฐ ์ ๋ ฌ๋ ์์๋ฅผ ๋ด์ ๋ฐฐ์ด์ด ํ๋ ํ์๋ก ํ๋ฏ๋ก O(n)
์ด๋ค.
.
ํต ์ ๋ ฌ๊ณผ ํจ๊ป ๋ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋๋ค๋ ์ธก๋ฉด์์ ๊ณตํต์ ์ ๊ฐ์ง๋ค.
๊ทธ๋ฌ๋ ํต ์ ๋ ฌ์ด ํผ๋ด ์ ํํ ํผ๋ด์ ๊ธฐ์ค์ผ๋ก ๋์๋ฅผ ๋น๊ตํ๋ ๋ฐ๋ฉด, ๋ณํฉ ์ ๋ ฌ์ ๋ฐฐ์ด์ ์์๊ฐ ํ๋์ผ๋๊น์ง ์ด๋ถํ ํ ๋ค์, ๋์๊ด๊ณ์ ๋ฐ๋ผ ์ฌ๋ฐฐ์ด ํ๋ฉฐ ์๋ ํฌ๊ธฐ์ ๋ฐฐ์ด๋ก ๋ณํฉํ๋ค.
์๋ฅผ ๋ค์ด ๋ฐฐ์ด [29, 10, 14, 37, 1, 40]์ด ์์ ๋, ์ฒซ ๋ฒ์งธ๋ก [29, 10, 14]์ [37, 1, 40]์ผ๋ก ๋ถ๋ฆฌํ๋ค.
๋ ๋ฒ์งธ๋ก [29, 10], [14], [37, 1], [40]์ผ๋ก ๋๋๋ค.
์ธ ๋ฒ์งธ๋ก [29], [10], [14], [37], [1], [40]์ผ๋ก ๋๋๋ค.
์ด๋ ๊ฒ ๋ชจ๋ ์์๊ฐ ๋ถ๋ฆฌ๋๋ฉด ๋์ ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ์ฌ ๋ณํฉ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
์ฒซ ๋ฒ์งธ๋ก [10, 29], [14], [1, 37], [40]์ด ๋๋ฉฐ, ๋ ๋ฒ์งธ๋ [10, 14, 29], [1, 37, 40]์ด ๋๋ค.
๋ง์ง๋ง์ผ๋ก ํ๋์ ๋ฐฐ์ด๋ก ๋ณํฉ๋๋ฉด์ [1, 10, 14, 29, 37, 40]์ ๊ฐ์ด ์ ๋ ฌ์ด ์๋ฃ๋๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1 | const merge = (left, right) => { |
๋ง์น๋ฉฐ
์์์ ์ ๋ฆฌํ 5๊ฐ์ง์ ์ ๋ ฌ ๋ฐฉ๋ฒ ์ธ์๋ ํ ์ ๋ ฌ, ํ ์ ๋ ฌ๋ฑ ์ ๋ง ๋ง์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
๋ชจ๋ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ๋ค ํ๊ตฌํ๊ณ ์ธ์ฐ๊ธฐ๋ ์ด๋ ต์ง๋ง ์ ์ ํ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด์ผ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๋งํผ ๊พธ์คํ CS ๊ณต๋ถ๋ฅผ ํด์ผ๊ฒ ๋ค๐ฅ