Lua学习之二分查找

来源:互联网 发布:网络报价单 编辑:程序博客网 时间:2024/05/29 18:42

Lua学习之二分搜索

作为技术小白的我,毕业的时候参加一家游戏公司的面试。由于自己实习的时候用过一段时间的Lua,所以简历上标明自己会Lua。结果面试官让我用Lua写一个二分搜索,当时自己就懵了,已经大半年没有用Lua了,很多语法都忘记了。回来之后,惭愧不已,自己翻看了一下语法,就写了一个,表示要重新学习Lua。
经过简化之后题目原型:
使用二分法从一个有序表中找出指定的值v,如果查找到,返回序号和v,反之,返回序号和接近v的值。
使用[LuaEditor][6]作为编译器版本是6.30版。支持断点跟踪,查看堆栈,语法高亮是很好的一个编译器。

代码块

-- 二分查找array = {1,3,5,9,13,19,35,40,45}function Search(t,v)    local left = 1;    local right = table.getn(t)    local mid = math.ceil((left + right)/2)    while left ~= mid do        if t[mid] == v then            break;        elseif t[mid] < v then            left = mid + 1        else             right = mid -1        end        mid = math.ceil((left + right)/2)    end    return mid,t[mid]endprint(Search(array,2))

写完代码之后,可按F7进行编译,F5运行,F9下断点。和大部分编译工具一样。
上面的输出结果时:
这里写图片描述
由于没有查找到2,所以返回和2接近的1。结果显示两个11是因为,第一个1是索引,第二个1是值。我们修改一下查找的值。

print(Search(array,40))

结果变成:
这里写图片描述

0 0