|
发表于 2024-7-5 16:02:44
|
查看: 105 |
回复: 1
二分法(也称为二分查找)是一种在有序数组中查找某一特定元素的算法。它通过每次将查找范围缩小一半来实现高效查找。以下是用 Lua 实现的二分查找算法:
- -- 二分查找函数
- function binarySearch(arr, target)
- local left = 1
- local right = #arr
- while left <= right do
- local mid = math.floor((left + right) / 2)
- if arr[mid] == target then
- return mid -- 找到目标,返回索引
- elseif arr[mid] < target then
- left = mid + 1 -- 目标在右半部分
- else
- right = mid - 1 -- 目标在左半部分
- end
- end
- return -1 -- 未找到目标,返回 -1
- end
- -- 测试二分查找函数
- local sortedArray = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}
- local target = 7
- local result = binarySearch(sortedArray, target)
- if result ~= -1 then
- print("元素找到,索引为: " .. result)
- else
- print("元素未找到")
- end
复制代码
在这个实现中:
1. `binarySearch` 函数接受一个有序数组 `arr` 和一个目标值 `target`。
2. 使用 `left` 和 `right` 变量来表示当前查找范围的左右边界。
3. 在 `while` 循环中,通过计算中间位置 `mid` 来逐步缩小查找范围。
4. 如果找到目标值,则返回其索引;否则根据目标值与中间值的比较结果调整查找范围。
5. 如果循环结束后仍未找到目标值,则返回 `-1` 表示未找到。
你可以根据需要修改和扩展这个基本实现。
|
|