Swift程序 使用快速排序算法升序排序数组
在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 { 00 == 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(n2)。它适用于大数据集,但对于小数据集来说并不是一个好的选择。