1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- pivot์ด ๋ฐฐ์ด์ ์ ๋ฐ์ผ๋ก ๋๋๋ค๊ณ ๊ฐ์ ํ์ ๋, ํ๊ท ์ ์ผ๋ก O(n log n) ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ,
- ๋ฐฐ์ด์ด ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ(์ต์ ์ ๊ฒฝ์ฐ), O(n ^ 2)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง
- pivot์ ๊ธฐ์ค์ผ๋ก ํฌ๊ณ ์์ ๋ฐฐ์ด๋ก ๋๋๊ฒ ๋๊ณ , ๋ค์ ํต์ ๋ ฌํ๋ ์ฌ๊ท์ ์ธ ํจํด์ด๋ฏ๋ก, ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
5. ์ ์ฒด ์ฝ๋
//MARK: - ํต์ ๋ ฌ ๊ตฌํํ๊ธฐ
//MARK: - Framework
import Foundation
//MARK: - Function
func getLeft(_ array: [Int], _ start: Int, _ end: Int, _ pivot: Int, _ left: inout [Int]) -> Int {
var index: Int = 0
for i in start...end {
if array[i] <= pivot {
left[index] = array[i]
index += 1
}
}
return index
}
func getRight(_ array: [Int], _ start: Int, _ end: Int, _ pivot: Int, _ right: inout [Int]) -> Int {
var index: Int = 0
for i in start...end {
if array[i] > pivot {
right[index] = array[i]
index += 1
}
}
return index
}
func quickSort(_ array: inout [Int], _ left: inout [Int], _ right: inout [Int], _ start: Int, _ end: Int) {
//array์ start ๋ฒ ์งธ ๊ฐ ๋ถํฐ end ๋ฒ ์งธ ๊ฐ ๊น์ง ํต ์ ๋ ฌ ํ๋ ํจ์
if start >= end {
return
}
let pivot: Int = array[start]
let leftCount: Int = getLeft(array, start + 1, end, pivot, &left)
let rightCount: Int = getRight(array, start + 1, end, pivot, &right)
for i in 0..<leftCount {
array[start + i] = left[i]
}
array[start + leftCount] = pivot
for i in 0..<rightCount {
array[start + leftCount + 1 + i] = right[i]
}
quickSort(&array, &left, &right, start, start + leftCount - 1)
quickSort(&array, &left, &right, start + leftCount + 1, end)
}
func solution() -> Void {
//MARK: - Input
guard let N: Int = Int(readLine() ?? "0") else { return }
guard let input = readLine()?.components(separatedBy: " ") else { return }
var answer: String = ""
var array: [Int] = input.map { Int($0) ?? 0 }
var left: [Int] = Array(repeating: 0, count: N)
var right: [Int] = Array(repeating: 0, count: N)
//MARK: - Process
quickSort(&array, &left, &right, 0, N - 1)
for i in 0..<array.count - 1 {
answer += "\(array[i]) "
}
answer += "\(array[array.count - 1])"
//MARK: - Output
print(answer)
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Sort Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฒ๋ธ์ ๋ ฌ(Bubble Sort) (0) | 2022.04.18 |
---|---|
์ฝ์ ์ ๋ ฌ(Insertion Sort) (0) | 2022.04.18 |
์ ํ์ ๋ ฌ(Selection Sort) (0) | 2022.04.18 |
ํฉ๋ณ์ ๋ ฌ ๊ตฌํํ๊ธฐ (0) | 2022.03.31 |
K๋ฒ์งธ ํฐ ์ ์ฐพ๊ธฐ (0) | 2022.02.28 |