Swift 程序使用快速排序对数组进行升序排序

swiftserver side programmingprogramming更新于 2025/9/23 12:37:17

Swift 中的快速排序算法是一种基于分治法的排序算法。在这种排序中,我们首先通过选择一个枢轴元素将数组划分为子数组。划分的方式是,最小元素放在枢轴元素的左侧,最大元素放在枢轴元素的右侧。现在,左右子数组也使用相同的方法进行划分。此过程持续到所有子数组都包含一个元素。此时,数组元素已排序完毕,我们将它们合并为一个数组以在输出中显示。现在我们使用快速排序按升序对数组进行排序。

算法

  • 步骤 1 − 创建一个函数,使用快速排序按升序对数组进行排序。

  • 步骤 2 − 在函数内部,我们首先检查数组的长度。如果它有 0 或 1 个元素,则返回已排序的数组。

  • 步骤 3 - 从给定数组的中间选择枢轴元素。

  • 步骤 4 - 过滤小于枢轴元素的元素

  • 步骤 5 - 过滤等于枢轴元素的元素

  • 步骤 6 - 过滤大于枢轴元素的元素

  • 步骤 7 - 现在递归地对子数组进行排序,并使用 + 运算符将它们连接成单个数组。

  • 步骤 8 - 调用函数并将数组传递给它。

  • 步骤 9 - 打印排序后的结果数组。

示例

在下面的示例中,我们将创建一个名为 quickSortAlgo() 的函数。该函数以一个数组作为输入,并借助快速排序将给定数组按升序排序。然后,我们首先从数组中选择中间元素作为枢轴元素。然后将数组分成三个包含元素的子数组:小于枢轴元素、大于枢轴元素和等于枢轴元素。现在,我们递归地对 lessEle 和 greaterEle 应用快速排序,然后使用 + 运算符连接所有已排序的子数组,最后按降序显示排序后的数组。

import Foundation
import Glibc

// 使用快速排序对数组进行升序排序的函数
func quickSortAlgo(arr: [Int]) -> [Int] {

    // 如果数组包含 0 或 1 个元素,则表示数组已排序
    guard arr.count > 1 else { return arr }
    
    // 选择中间的枢轴元素
    let pivotEle = arr[arr.count/2]
    
    // 过滤小于枢轴元素的元素
    let lessEle = arr.filter { $0 < pivotEle }
    
    // 过滤等于枢轴元素的元素
    let equalEle = arr.filter { $0 == pivotEle }
    
    // 过滤大于枢轴元素的元素
    let greaterEle = arr.filter { $0 > pivotEle }
    
    // 现在递归地对子数组进行排序,并将它们连接成单个数组
   return quickSortAlgo(arr: lessEle) + equalEle + quickSortAlgo(arr: greaterEle) 
}

let arr = [3, 6, 1, 8, 1, 56, 23, 12, 5]
let resultantArr = quickSortAlgo(arr: arr)
print("已排序数组:", resultantArr)

输出

已排序数组:[1, 1, 3, 5, 6, 8, 12, 23, 56]

结论

以上就是如何使用快速排序对数组进行升序排序的方法。这里我们使用 filter(_:) 方法实现快速排序,但您也可以使用其他方法。快速排序由于其分治法,可以轻松解决问题,但它的最坏情况时间复杂度为 O(n²)。它适用于大数据集,但对于小数据集则不是最佳选择。



相关文章



关于我们 | 隐私条款 | 学习路线
返回顶部