在 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)。