|
发表于 2024-7-5 16:03:45
|
查看: 163 |
回复: 0
接下来我们可以实现快速排序(Quick Sort)算法。快速排序是一种高效的排序算法,它采用分治法策略,通过递归地将数组分成较小的子数组来排序。
以下是用 Lua 实现的快速排序算法:
- -- 获取分区索引
- local pi = partition(arr, low, high)
- -- 递归地对分区进行排序
- quickSort(arr, low, pi - 1)
- quickSort(arr, pi + 1, high)
- end
- end
- -- 分区函数
- function partition(arr, low, high)
- local pivot = arr[high] -- 选择最后一个元素作为枢轴
- local i = low - 1
- for j = low, high - 1 do
- if arr[j] <= pivot then
- i = i + 1
- arr, arr[j] = arr[j], arr -- 交换元素
- end
- end
- arr[i + 1], arr[high] = arr[high], arr[i + 1] -- 将枢轴放到正确位置
- return i + 1
- end
- -- 测试快速排序函数
- local array = {10, 7, 8, 9, 1, 5}
- local n = #array
- quickSort(array, 1, n)
- print("排序后的数组:")
- for i = 1, n do
- print(array)
- end
复制代码
在这个实现中:
1. `quickSort` 函数接受一个数组 `arr` 以及两个索引 `low` 和 `high`,表示当前需要排序的子数组范围。
2. `partition` 函数用于将数组分区,并返回枢轴的索引。分区过程将所有小于枢轴的元素移到枢轴左边,大于枢轴的元素移到右边。
3. 在 `quickSort` 函数中,通过递归调用自身来对分区后的子数组进行排序。
4. 最后,通过测试代码对一个数组进行排序,并输出排序后的结果。
快速排序的时间复杂度在平均情况下为 \(O(n \log n)\),在最坏情况下为 \(O(n^2)\),但它通常比其他 \(O(n \log n)\) 算法(如归并排序)更快,因为它的内部循环可以在大多数架构上非常高效地实现。
|
|