Stable Sort
Stable sort๋ ์ค๋ณต๋ ํค๋ฅผ ์์๋๋ก ์ ๋ ฌํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์ง์นญํ๋ค. ์ฆ, ๊ฐ์ ๊ฐ์ด 2๊ฐ ์ด์ ๋ฆฌ์คํธ์ ๋ฑ์ฅํ ๋ ๊ธฐ์กด ๋ฆฌ์คํธ์ ์๋ ์์๋๋ก ์ค๋ณต๋ ํค๋ค์ด ์ ๋ ฌ๋ ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ list๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
numbers = [9, 3, 12, 1, 6, 2, 1]
์ด ๋ฆฌ์คํธ์์ 1 ์ด๋ผ๋ ๊ฐ์ด ์ค๋ณต์ด ๋๋ค. ์ด๋ ์ค๋ณต๋๋ 1์ ๊ฐ๋ค์ ๊ตฌ๋ถํด์ ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค.
numbers = [9, 3, 12, 1(1๋ฒ์งธ), 6, 2, 1(2๋ฒ์งธ)]
๋ง์ฝ ์ด ๋ฆฌ์คํธ๋ฅผ stable sort ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๋ ฌ์ ํ๋ค๋ฉด ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
[1(1๋ฒ์งธ), 1(2๋ฒ์งธ), 2, 3, 6, 9, 12]
์ด์ฒ๋ผ ๊ธฐ์กด ๋ฆฌ์คํธ์์ ์ค๋ณต๋ ๊ฐ๋ค์๊ฒ ์์๊ฐ ๋งค๊ฒจ์ก๋๋ฐ, ๊ทธ ์์๋๋ก ์ ๋ ฌ์ด ๋ฌ์ ๋ ์ด ์๊ณ ๋ฆฌ์ฆ์ stable sort๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ ๊ฒ์ด๋ค.
Why Stable Sort?
๊ทธ๋ ๋ค๋ฉด ์ stable sort๊ฐ ์ค์ํ์ง ๊ถ๊ธํ ์ ์๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค:
- stable sort๋ก ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์์๋ ํญ์ ๋๊ฐ๊ธฐ์ ํญ์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์์ ๋ณด์ฅํ ์ ์๋ค.
- ์ซ์๋ฅผ sortingํ ๋๋ stability๊ฐ ์ค์ํ์ง ์์ ์ ์์ง๋ง, ์ฒซ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด์ ์ ๋ ฌํ๋ ๊ฒฝ์ฐ์์๋ ํญ์ ์์ ์ ์ผ๋ก ๊ฐ์ ๋ฆฌ์คํธ๊ฐ ๋ฆฌํด๋๋ ๊ฒ์ด ๋ฐ๋์งํ ๊ฒ์ด๋ค. (์๋ํ๋ฉด ์ ๋ ฌํ ๋๋ง๋ค ์์๊ฐ ๋ค๋ฅด๋ฉด ํผ๋์ค๋ฌ์ธ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค)
Stable Sorting ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค:
- Insertion Sort
- Merge Sort
- Bubble Sort
- Counting Sort
Unstable Sorting ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค:
- Heap Sort
- Selection sort
- Shell sort
- Quick Sort
Inplace algrithm
Inplace ์๊ณ ๋ฆฌ์ฆ์ด๋ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง์ด ํ์๋ก ํ์ง ์๋ ํน์ ์ ํ ํ์ํ์ง ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฏธํ๋ค. ํต์์ ์ผ๋ก, ๊ณต๊ฐ์ O(logn)์ด๊ณ O(n)์ด ๋ ๋๋ ์๋ค.
์ฆ, n ๊ธธ์ด์ ๋ฆฌ์คํธ๊ฐ ์๊ณ , ์ด ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋ ์ถ๊ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ์ง ์์๋ ์ ๋ ฌ์ด ์ด๋ค์ง๋ค๋ฉด in-place ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋ถ๋ฆด ์ ์๋ ๊ฒ์ด๋ค.
In-placeํ์ง ์์ ์๊ณ ๋ฆฌ์ฆ์ n ๊ธธ์ด์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋ n ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๋ค. ์ฆ, ์ด๋ฐ ์๊ณ ๋ฆฌ์ฆ๋ค์ space complexity๊ฐ ๋๋ค.