快速排序实现原理: 1.选数组中某一个元素做为基数,可随便选,通常选取数组第一元素或者数组最后一个元素 2.对数组作第一次排序,将数组中小于基数的元素都放到数组的左边,数组中大于基数的元素都放到数组的右边 3.第一次排序后,将数组分割为左右两个数组,继续对分割后的数组进行排序,排序后继续分割,直到数组再也不可被分割为止swift
本文在swift5的环境下,实现代码以下:数组
func partition(data: inout [Int], low: Int, high: Int) -> Int {
//取数组中最后一个元素做为基数
let root = data[high]
//index从0开始,记录数组中大于基数的元素位置
var index = low
//一次循环对数组进行一次遍历
for i in low ... high {
//当data[i]<基数且i != index时,交换数组i和index的元素,并index+=1,继续向下记录
if data[i] < root {
if i != index {
data.swapAt(i, index)
}
index += 1
}
}
//循环结束后,index记录了此时数组中大于基数的元素,若index不是数组中的最后一个元素,则交换元素的位置
if high != index {
data.swapAt(high, index)
}
//第一次分割结束,返回此时数组分割元素的位置,即index左边的元素都小于root,index右边的元素都大于root
return index
}
func quickSort(data: inout [Int], low: Int, high: Int) {
if low > high {
return
}
let mid = partition(data: &data, low: low, high: high)
quickSort(data: &data, low: low, high: mid - 1)
quickSort(data: &data, low: mid + 1, high: high)
}
复制代码