如何用 Swift 实现快速排序算法

105 阅读1分钟

在 Swift 中,我们可以通过递归实现快速排序。以下是一个实现的示例代码:

func quickSort<T: Comparable>(_ array: [T]) -> [T] {
    // 当数组为空或只有一个元素时,直接返回
    guard array.count > 1 else { return array }

    // 选择一个基准值(通常选择第一个或随机选择)
    let pivot = array[array.count / 2]

    // 将数组划分为三部分
    let less = array.filter { $0 < pivot }
    let equal = array.filter { $0 == pivot }
    let greater = array.filter { $0 > pivot }

    // 最后递归排序并合并
    return quickSort(less) + equal + quickSort(greater)
}

测试代码如下:

// 测试
let unsortedArray = [3, 6, 8, 10, 1, 2, 1]
let sortedArray = quickSort(unsortedArray)
print(sortedArray) // 输出: [1, 1, 2, 3, 6, 8, 10]

代码解析如下:

  • 递归:每次将数组分成三部分:less:比基准值小的元素;equal:与基准值相等的元素;greater:比基准值大的元素。递归对 less 和 greater 部分排序。
  • 终止递归:当数组为空或只有一个元素时,直接返回数组,因为它已经是有序的。
  • 最后直接返回排序完成的 less 部分 + equal 部分 + 排序完成的 greater 部分。

平均的时间复杂度为 O(nlogn)。