var a = [2,3,0,1,6,3,6,2,43,234,3,4,5,4,5,8,2]
quickSort(unsortedArray: &a, leftIndex: 0, rightIndex: a.count - 1)
func quickSort(unsortedArray: inout [Int], leftIndex: Int, rightIndex: Int) {
guard unsortedArray.count > 1 else {
return
}
// 获取中间值
let pivot = unsortedArray[(leftIndex + rightIndex) / 2]
var i = leftIndex
var j = rightIndex
// 循环开始
while i < j {
// 如果 unsortedArray[i] 小于 中间值,则 i 加 1,直到 大于 中间值停止
while unsortedArray[i] < pivot {
i += 1
}
// 如果 unsortedArray[j] 大于中间值,则 j 减 1,直到 小于 中间值停止
while unsortedArray[j] > pivot {
j -= 1
}
// 如果 i <= j && i != j ,则交换i跟j所对应下标的值。让大于中间的数放在右边,小于中间值的数放在左边。
// 如果 i > j, 则跳出循环
if i <= j {
if i != j {
unsortedArray.swapAt(i, j)
print(unsortedArray)
}
// 交换值后,i继续加1,j继续减1, 直到 i > j
i += 1
j -= 1
}
}
// 如果最左的值小于J 则从最左到J 继续排序
if leftIndex < j {
quickSort(unsortedArray: &unsortedArray, leftIndex: leftIndex, rightIndex: j)
}
// 如果 j <= leftIndex , i< rigthIndex 则从i开始,到最右重新排序
if i < rightIndex {
quickSort(unsortedArray: &unsortedArray, leftIndex: i, rightIndex: rightIndex)
}
}