1. O(nlogn)์ธ ๊ฒ
1. ๋ณํฉ ์ ๋ ฌ
๋ฐฐ์ด์ ์ต์๋จ์๊น์ง ๋ถํ ํ, ํฉ์น๋ฉด์ ์ ๋ ฌํ์ฌ ํ๋์ ๋ฐฐ์ด์ ๋ง๋๋ ๋ฐฉ์์ด๋ค.
ํฉ์น ๋๋ ๋ ๋ฐฐ์ด์ 0๋ฒ์งธ ์์๋ฅผ ๋น๊ตํ๋ฉฐ ๋ ์์ ์์๋ฅผ ์ถ๊ฐํ๊ณ ๋ค์ ๋น๊ตํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
๋ถํ ๊ณผ์ ์ logN๋งํผ ์ผ์ด๋๋ฉฐ, 2N์ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ค. ์ด๋ ๋ฐฐ์ด์ด ์๋ linked list๋ฅผ ์ฌ์ฉํ๋ฉด N์ ์ ์ฅ๊ณต๊ฐ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ๊ธฐ์กด ์ ์ฅ๊ณต๊ฐ์์ ํฌ์ธํฐ๋ง ๋ฐ๊พธ๋ ์์ผ๋ก ์ํํ ์ ์๋ค. ๋ฐฐ์ด์ ์ชผ๊ฐค ๊ฒฝ์ฐ head ํฌ์ธํฐ๋ฅผ ์ถ๊ฐ๋ก ๋ง๋ค๊ณ , ํฉ๋ณ ๊ณผ์ ์์๋ next ์ฃผ์๊ฐ์ ์ ์ ํ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
ํฉ๋ณ์ ๋ ฌ์ ๊ฐ์ ์ซ์์ ๊ฒฝ์ฐ ์์๊ฐ ๋ค๋ฐ๋์ง ์๋ stable sort์ด๋ค.
<์ฝ๋ ์ถ๊ฐ>
2. ํ ์ ๋ ฌ
์์๋ค์ ํ์ ์ฝ์ ํ๋๋ฐ ๊ฐ ๋ ธ๋์ ๊ฐ์ด ์์๋ ธ๋๋ณด๋ค ํฐ ์ด์งํธ๋ฆฌ๊ฐ ๋๋๋ก ์ฝ์ ํ๋ค. ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ฉด ํธ๋ฆฌ ๋ด์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ์ง๋ ๋ฃจํธ๋ถํฐ ์ ๊ฑฐํ๋ฉฐ ์๋ก์ด ๋ฐฐ์ด์ ๋ง์ง๋ง๋ถํฐ ์ฑ์๋๊ฐ๋ค. ์ ๊ฑฐํ ๋ค์๋ ์ด์งํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ ์งํ ์ ์๋๋ก ํ๋ค. ์ ํ์ ๋ ฌ๊ณผ ๊ฑฐ์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํ ์ ๋ ฌ์ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋กํ์ง ์์ผ๋ฉฐ, ๊ฒฝ์ฐ์ ์๊ด์์ด O(nlogn)์ผ๋ก ์์ ์ ์ธ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
<์ฝ๋ ์ถ๊ฐ>
3. ํต ์ ๋ ฌ
์ ์ ํ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ๊ณ (pivot) ์ด๋ณด๋ค ์์ ์์๋ ์ผ์ชฝ์, ํฐ ์์๋ ์ค๋ฅธ์ชฝ์ ์์นํ๋๋ก ์ ๋ ฌํ๋ค. ์ด ๊ณผ์ ์ partition step์ด๋ผ๊ณ ํ๋ค. partition step์ ์ด๋ป๊ฒ ํ๋๋์ ๋ฐ๋ผ ์ธ๋ถ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ํ ์ ์๋ค. ์ดํ pivot์ ๊ธฐ์ค์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ๋ถํ ํ๊ณ , ๋ถํ ๋ ๋๊ฐ ๋ฆฌ์คํธ์ ๊ฐ๊ฐ ์ฌ๊ท์ ์ผ๋ก ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ left<right๋ฅผ ๋ง์กฑํ์ง ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
ํต ์ ๋ ฌ์ ๊ฐ์ O(nlogn)์ธ ์ํฉ์์ ๊ฐ์ฅ ๋น ๋ฅด๊ณ , ์ต์
์ ๊ฒฝ์ฐ O(n²)์ด๋ค. ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ ๋ ฌํ ๋๋, pivot์ ํญ์ ์ฒซ๋ฒ์งธ ์์๋ก ํ๋๋ก ๊ตฌํํ์ ๋๊ฐ ๊ทธ๋ฐ ๊ฒฝ์ฐ์ด๋ค.
๋ฐ๋ผ์ ํต ์ ๋ ฌ์ ์กฐ๊ธ ์์ ํ์ฌ ์ต์
์ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ๋ฐ์ํ์ง ์๋๋กํ๊ณ ๋์ ๊ฒฝ์ฐ๋ค ์ถ์ผ๋ฉด ํ ์ ๋ ฌ๋ก ์ ํํ๋๋ก ์ฝ๋ฉํ๋ค. ์์ ํ๋ ๋ฐฉ๋ฒ ์ค ํ ๊ฐ์ง๋ pivot์ ๋๋ค์ผ๋ก ์ก๋ ๊ฒ์ด๋ค.์ด๋ ๊ฒ ํต ์ ๋ ฌ์ ์ฌ๊ท๊ฐ ์ผ์ ๊น์ด ์ด์์ด ๋๋ฉด ํ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ '์ธํธ๋ก ์ ๋ ฌ'์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ค์ ๋ก ๋๋ ค๋ณด๋ฉด ํต์ํธ๊ฐ ์คํ๋ ค ๋น ๋ฅธ ๊ฒฝ์ฐ๊ฐ ์ข
์ข
์๋ค. ๋น๊ตํ๋ ๊ธฐ์ค์ ์ด ํ๋๋ก ๊ณ ์ ๋๊ณ ๊ทธ ๊ธฐ์ค์ ์ด ๋ง์ ๋น๊ต๋ฅผ ์ํํ๋ ํต ์ ๋ ฌ์ ํน์ฑ์ ๋ ์ง์คํฐ์ ๋น๊ตํ ๊ธฐ์ค๊ฐ์ ์ฌ๋ ค๋๊ณ ๋ค์ ๋น๊ตํ ์์๋ฅผ ์์ธกํ์ฌ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ฌ๋ฒ ๋ ์ง์คํฐ๋ก ์ฌ๋ฆฌ๋ ์๊ฐ์ด ์๋ต๋์ด ์คํ๋ ค ๋ ๋น ๋ฅธ ๊ฒฝ์ฐ๋ฅผ ๋ณผ ์ ์๋ค.
<์ฝ๋ ์ถ๊ฐ>
2. O(n²)์ธ ๊ฒ
1. ๋ฒ๋ธ ์ ๋ ฌ
2. ์ ํ ์ ๋ ฌ
3. ์ฝ์ ์ ๋ ฌ
3. ๊ธฐํ
1. ํ ์ ๋ ฌ
python์ sort() ํจ์, java์ Array.sort()
'์ค์ ๋ฐ์ดํฐ๋ ๋๋ถ๋ถ ์ด๋ฏธ ์ ๋ ฌ์ด ๋์ด์์ ๊ฒ์ด๋ค'๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ค์ ๋ฐ์ดํฐ์์ ๊ณ ์ฑ๋ฅ์ ๋ผ ์ ์๋๋ก ์ค๊ณํ ์๊ณ ๋ฆฌ์ฆ. ๋ณํฉ๊ณผ ์ฝ์ ์ ๋ ฌ์ ์กฐํฉํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ณํฉ ์ ๋ ฌ์ ์์์ ๊ฐ์๊ฐ ์ ์ ๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํํฐ์ ํฌ๊ธฐ๊ฐ ํน์ ๊ฐ ์ดํ(16/32)๊ฐ ๋๋ฉด ์ฝ์ ์ ๋ ฌ์ ์ฌ์ฉํ๋ค.
๋ณํฉ ์ ๋ ฌ์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ ์ด๋ O((1/2)n)์ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ์ํ๋ค.
<์ฐธ๊ณ ์๋ฃ ๋ฐ ์ถ์ฒ>
https://hsp1116.tistory.com/33
๊ธฐ๋ณธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ(Sorting Algoritm) ์์ฝ ์ ๋ฆฌ (์ ํ, ์ฝ์ , ๋ฒ๋ธ, ํฉ๋ณ, ํต) v1.1
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ n๊ฐ์ ์ซ์๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ธฐ์ค์ ๋ง๊ฒ ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์๋ฅผ ๋ค์ด n๊ฐ์ ์ซ์๊ฐ ์ ์ฅ๋์ด์๋ ๋ฐฐ์ด์, ์ค๋ฆ์ฐจ์์ ์กฐ๊ฑด์ผ๋ก
hsp1116.tistory.com
https://namu.wiki/w/%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#fn-14
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ - ๋๋ฌด์ํค
๋๊ฐ ๊ณ์ฐ ์๊ฐ์ด ์ ๋ ฌํ ์๋ฃ์ ์์ ์ ๊ณฑ์ ๋น๋กํด์ ๋์ด๋๋ค. ์ฆ, 1๋ง ๊ฐ๋ฅผ 1์ด์ ์ ๋ ฌํ๋ฉด 10๋ง ๊ฐ๋ฅผ ์ ๋ ฌํ๋ ๋ฐ์๋ 100์ด ์ ๋๊ฐ ํ์ํ๋ค. ์นตํ ์ผ ์ ๋ ฌ(cocktail sort) ์นตํ ์ผ ์ ๋ ฌ์ ๊ณผ์ ์
namu.wiki
'TIL ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] Memory Management (0) | 2021.02.01 |
---|---|
์๋ฃ๊ตฌ์กฐ (0) | 2021.01.14 |