歸并排序(swift)

func mergeSort(_ array: [Int]) -> [Int] {
    return mergeSortPrivate(array)
}

private func mergeSortPrivate(_ array: [Int]) -> [Int] {
    if array.count <= 1 {return array}
    
    let tmpArr = array
    let count = array.count
    let middle = (count - 1) / 2

    let leftArr = mergeSortPrivate(Array(tmpArr[0...middle]))
    let rightArr = mergeSortPrivate(Array(tmpArr[middle+1...count-1]))
    return merge(leftArr, rightArr)
}

private func merge(_ arr1: [Int], _ arr2: [Int]) -> [Int] {
    var tmpArr = [Int]()
    var j = 0;
    var k = 0;
    while j < arr1.count && k < arr2.count {
        if arr1[j] <= arr2[k] {
            tmpArr.append(arr1[j])
            j += 1
        } else {
            tmpArr.append(arr2[k])
            k += 1
        }
    }
    
    if j == arr1.count {
        tmpArr += arr2[k..<arr2.count]
    } else {
        tmpArr += arr1[j..<arr1.count]
    }
    
    return tmpArr
}

print(mergeSort([0,5,3,2,8,9,1,5,2,4,6,8]))

[0, 1, 2, 2, 3, 4, 5, 5, 6, 8, 8, 9]
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容