找回密码
马上加入

QQ登录

只需一步,快速开始

搜索
发新帖

0

收听

2

听众

108

主题
发表于 2024-7-5 16:03:45 | 查看: 163| 回复: 0
接下来我们可以实现快速排序(Quick Sort)算法。快速排序是一种高效的排序算法,它采用分治法策略,通过递归地将数组分成较小的子数组来排序。

以下是用 Lua 实现的快速排序算法:
  1. -- 获取分区索引
  2.         local pi = partition(arr, low, high)

  3.         -- 递归地对分区进行排序
  4.         quickSort(arr, low, pi - 1)
  5.         quickSort(arr, pi + 1, high)
  6.     end
  7. end

  8. -- 分区函数
  9. function partition(arr, low, high)
  10.     local pivot = arr[high] -- 选择最后一个元素作为枢轴
  11.     local i = low - 1

  12.     for j = low, high - 1 do
  13.         if arr[j] <= pivot then
  14.             i = i + 1
  15.             arr, arr[j] = arr[j], arr -- 交换元素
  16.         end
  17.     end

  18.     arr[i + 1], arr[high] = arr[high], arr[i + 1] -- 将枢轴放到正确位置
  19.     return i + 1
  20. end

  21. -- 测试快速排序函数
  22. local array = {10, 7, 8, 9, 1, 5}
  23. local n = #array
  24. quickSort(array, 1, n)

  25. print("排序后的数组:")
  26. for i = 1, n do
  27.     print(array)
  28. end
复制代码

在这个实现中:

1. `quickSort` 函数接受一个数组 `arr` 以及两个索引 `low` 和 `high`,表示当前需要排序的子数组范围。
2. `partition` 函数用于将数组分区,并返回枢轴的索引。分区过程将所有小于枢轴的元素移到枢轴左边,大于枢轴的元素移到右边。
3. 在 `quickSort` 函数中,通过递归调用自身来对分区后的子数组进行排序。
4. 最后,通过测试代码对一个数组进行排序,并输出排序后的结果。

快速排序的时间复杂度在平均情况下为 \(O(n \log n)\),在最坏情况下为 \(O(n^2)\),但它通常比其他 \(O(n \log n)\) 算法(如归并排序)更快,因为它的内部循环可以在大多数架构上非常高效地实现。

您需要登录后才可以回帖 登录 | 马上加入

QQ|Archiver|手机版|小黑屋|alg阿灵戈社区 ( 苏ICP备2023026137号-1|苏ICP备2023026137号-1 )

GMT+8, 2025-3-12 23:33 , Processed in 0.500541 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表