基於swift5算法與數據結構(一)快速排序

快速排序實現原理: 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)
}
複製代碼
相關文章
相關標籤/搜索