์ด๊ธ์ ๋น์ ๊ณต์ ์ทจ์ค์์ด ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์์ฑํ ๊ธ์ ๋๋ค.
์์ธํ ๋ด์ฉ์ https://babbab2.tistory.com/101 ์ด๊ณณ์์ ํ์ธํด์ฃผ์ธ์!
๋ชจ๋ ์ด๋ฏธ์ง์ ์ถ์ฒ๋ ์์ ํฐ์คํ ๋ฆฌ์์ ๋ฐํ๋๋ค.
๋ถํ ์ ๋ณต
๋ฌธ์ ๋ฅผ ๋๋ ์ ์์ ๋๊น์ง ๋๋์ด์ ํ๊ณ , ๋๋์ด์ ํผ ๋ฌธ์ ๋ฅผ ๋ค์ ํฉ๋ณํ์ฌ ๋ต์ ์ป๋ ์๊ณ ๋ฆฌ์ฆ
ํ์์ ์ ๊ทผ๋ฒ์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ทํจ์๋ก ๊ตฌํํฉ๋๋ค.
ํต ์ ๋ ฌ
ํ๋์ ๋ฆฌ์คํธ๋ฅผ pivot(๊ธฐ์ค์ )์ ๊ธฐ์ค์ผ๋ก 2๊ฐ์ ๋น๊ท ๋ฑํ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ ๋ถํ ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋ค์,
2๊ฐ์ ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ํฉํ์ฌ ์ ์ฒด๊ฐ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๊ฐ ๋๊ฒํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฝ๊ฒ ์๊ฐํ๋ฉด ๋ฐฐ์ด์ ๋ถํ ํ๊ณ ์ ๋ ฌํ ๋ค์, ๋ค์ํฉ์น๋ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
ํต์ ๋ ฌ์ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
1. ๊ธฐ์ค์ (pivot)์ ์ ํด์, ๊ธฐ์ค์ ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ ์ผ์ชฝ(left), ํฐ ๋ฐ์ดํฐ๋ ์ค๋ฅธ์ชฝ(right)์ผ๋ก ๋ชจ์๋๋ค.
2. ์์์ ๋ชจ์ ์ผ์ชฝ(left), ์ค๋ฅธ์ชฝ(right)์ ๊ฐฏ์๊ฐ 1๊ฐ ์ดํ๊ฐ ๋ ๋๊น์ง ์ ์์ ์ ์ฌ๊ท๋ก ๋ฐ๋ณตํฉ๋๋ค.
3. ์ฌ๊ท ํจ์๋ ์ผ์ชฝ(left) + ๊ธฐ์ค์ (pivot) + ์ค๋ฅธ์ชฝ(right)์ ๋ฆฌํดํฉ๋๋ค.
์ดํด๋ฅผ ๋๊ธฐ ์ํ ์์
๋จผ์ , ๊ฐ์ฅ ์ฒซ๋ฒ์งธ Index๋ฅผ pivot(๊ธฐ์ค์ )์ผ๋ก ์ก์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ pivot๋ณด๋ค ์์ ์์๋ค์ ์ผ์ชฝ(left)์ด๋ผ๋ ๋ฐฐ์ด์, ํฐ ์์๋ค์ ์ค๋ฅธ์ชฝ(right)๋ผ๋ ๋ฐฐ์ด์ ๋ชจ์๋๋ค.
์ด ๋๋ ๋์ left, right ๋ฐฐ์ด์ ๋ค์ ์ฌ๊ท์ํต๋๋ค. (๋๋ ์ง left, right์ ๊ฐฏ์๊ฐ 1๊ฐ ์ดํ๊ฐ ๋ ๋๊น์ง)
๊ฐ๊ฐ์ left ๋ชจ์์ด ๊ฐฏ์ 1๊ฐ๊ฐ ๋์๊ธฐ ๋๋ฌธ์ ์ฌ๊ท์ ํ์ถ ์กฐ๊ฑด์ ์ํด ๋์ด์ ์ฌ๊ทํ์ง ์์ต๋๋ค.
์ด์ return ์กฐ๊ฑด์ ๋ฐ๋ผ left + pivot + right๊ฐ return ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์ฐจ๋ก๋๋ก ์ฌ๊ทํจ์๊ฐ return๋๋ค๋ณด๋ฉด, ๋ง์ง๋ง์๋ ์ต์ข ์ ์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์ด return๋ฉ๋๋ค.
์ฝ๋๋ก ๊ตฌํ
func quickSort(_ array: [Int]) -> [Int] {
guard let first = array.first, array.count > 1 else { return array }
let pivot = first
let left = array.filter { $0 < pivot }
let right = array.filter { $0 > pivot }
return quickSort(left) + [pivot] + quickSort(right)
}
์๊ฐ๋ณต์ก๋
ํต ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๋ O(nlogn)์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์ฒซ๋ฒ์งธ index์ธ pivot์ด ๊ฐ์ฅ ํฌ๊ฑฐ๋ ๊ฐ์ฅ ์์ผ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด์ผํด์ O(n^2)์ด๋ผ๊ณ ํฉ๋๋ค.
'๐ป CS > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑํธ๋ํน (0) | 2023.05.09 |
---|---|
[Swift] ๋์ ๊ณํ๋ฒ (Dynamic Programming) ์ดํดํ๊ธฐ (0) | 2023.04.12 |
[Swift] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2023.04.04 |
[Swift] ๊น์ด์ฐ์ ํ์(DFS) ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.03.30 |
[Swift] ๋๋น์ฐ์ ํ์(BFS) ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.03.29 |