Lua学习之二分查找

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]
end

print(Search(array,2))

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

print(Search(array,40))

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

你可能感兴趣的:(Lua)