原地排序, 分界点选取最后一个元素
private func partition(_ array: inout [Int], _ p: Int, _ r: Int) -> Int {
let pivot = array[r]
var i = p
for j in p...r-1 {
if array[j] < pivot {
array.swapAt(i, j)
i += 1
}
}
array.swapAt(i, r);
return i
}
public func qucikSort(_ array: inout [Int], _ p: Int, _ r: Int) -> [Int] {
if p >= r { return array }
let i = partition(&array, p, r)
qucikSort(&array, p, i-1)
qucikSort(&array, i+1, r)
return array
}
原地排序, 分界点选取第一个元素
private func partition(_ array: inout [Int], _ p: Int, _ r: Int) -> Int {
let pivot = array[p]
var i = p, j = r
while i != j {
while array[j] >= pivot && i < j {
j -= 1
}
while array[i] <= pivot && i < j {
i += 1
}
if i < j {
array.swapAt(i, j);
}
}
array.swapAt(p, i);
return i
}