快速排序實現原理: 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)
}
複製代碼