使用快速排序算法对数组进行升序排序的 Swift 程序
Swift 中的快速排序算法是一种基于分治法的排序算法。在这种排序中,我们首先通过选择一个基准元素将数组划分为子数组。这里的划分方式是这样的:将最小的元素放置在基准元素的左侧,将最大的元素放置在基准元素的右侧。现在,使用相同的方法对左右子数组也进行划分。这个过程持续进行,直到所有子数组都只包含一个元素。此时,数组元素已排序,我们将其合并到一个数组中,并在输出中显示它们。因此,我们现在使用快速排序算法对数组进行升序排序。
算法
步骤 1 − 创建一个函数,使用快速排序算法对数组进行升序排序。
步骤 2 − 在函数内部,首先检查数组的长度。如果它包含 0 或 1 个元素,则返回已排序的数组。
步骤 3 − 从给定数组的中间选择基准元素。
步骤 4 − 筛选小于基准元素的元素
步骤 5 − 筛选等于基准元素的元素
步骤 6 − 筛选大于基准元素的元素
步骤 7 − 现在递归地对子数组进行排序,并使用 + 运算符将它们连接到单个数组中。
步骤 8 − 调用函数并将数组传递给它。
步骤 9 − 打印已排序的数组。
示例
在以下示例中,我们将创建一个名为 quickSortAlgo() 的函数。此函数将数组作为输入,并借助快速排序算法将给定数组排序为升序。然后,我们首先从数组中选择中间元素作为基准元素。然后将数组划分为三个子数组,包含以下元素:小于基准元素的元素、大于基准元素的元素以及等于基准元素的元素。现在,我们递归地将快速排序应用于 lessEle 和 greaterEle,然后使用 + 运算符连接所有已排序的子数组,最后以降序显示已排序的数组。
import Foundation import Glibc // Function to sort the array in ascending order using quick sort func quickSortAlgo(arr: [Int]) -> [Int] { // Array is already sorted if it has 0 or 1 elements guard arr.count > 1 else { return arr } // Select a pivot element in the middle let pivotEle = arr[arr.count/2] // Filter the elements that are less than the pivot let lessEle = arr.filter { $0 < pivotEle } // Filter the elements that are equal to the pivot element let equalEle = arr.filter { $0 == pivotEle } // Filter the elements that are greater than the pivot element let greaterEle = arr.filter { $0 > pivotEle } // Now recursively sort the sub-arrays and concatenate them into the single array 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("Sorted Array:", resultantArr)
输出
Sorted Array: [1, 1, 3, 5, 6, 8, 12, 23, 56]
结论
因此,这就是我们如何使用快速排序算法对数组进行升序排序。在这里,我们使用 filter(_:) 方法来实现快速排序,但您也可以使用其他方法。快速排序由于其分治法而轻松地解决了问题,但它具有最坏情况下的时间复杂度,即 O(n2)。它适用于大型数据集,但对于小型数据集来说不是一个好的选择。