-- 二分查找迭代版本下划线命名-- param arr 已排序的升序数组-- param target 要查找的目标值-- return 找到返回索引从1开始否则返回nilfunctionbinary_search(arr,target)localleft1localright#arrwhileleftrightdo-- 计算中间位置避免整数溢出Lua 自动处理但习惯写法localmidleftmath.floor((right-left)/2)localmid_valarr[mid]ifmid_valtargetthenreturnmidelseifmid_valtargetthenleftmid1elserightmid-1endendreturnnilend-- 测试代码functionrun_tests()print( 二分查找测试 )-- 测试用例1正常数组目标存在localtest1{1,3,5,7,9,11,13,15}localtarget17localresult1binary_search(test1,target1)print(测试1数组 [1,3,5,7,9,11,13,15] 查找 7 → 索引 ..tostring(result1).. (期望 4))-- 测试用例2目标不存在localtarget28localresult2binary_search(test1,target2)print(测试2查找 8 → 结果 ..tostring(result2).. (期望 nil))-- 测试用例3查找第一个元素localtarget31localresult3binary_search(test1,target3)print(测试3查找 1 → 索引 ..tostring(result3).. (期望 1))-- 测试用例4查找最后一个元素localtarget415localresult4binary_search(test1,target4)print(测试4查找 15 → 索引 ..tostring(result4).. (期望 8))-- 测试用例5空数组localempty{}localtarget510localresult5binary_search(empty,target5)print(测试5空数组查找 10 → 结果 ..tostring(result5).. (期望 nil))-- 测试用例6单个元素数组存在localsingle{42}localtarget642localresult6binary_search(single,target6)print(测试6[42] 查找 42 → 索引 ..tostring(result6).. (期望 1))-- 测试用例7单个元素数组不存在localtarget7100localresult7binary_search(single,target7)print(测试7[42] 查找 100 → 结果 ..tostring(result7).. (期望 nil))-- 测试用例8偶数长度数组localeven_arr{2,4,6,8,10,12}localtarget86localresult8binary_search(even_arr,target8)print(测试8[2,4,6,8,10,12] 查找 6 → 索引 ..tostring(result8).. (期望 3))-- 测试用例9奇数长度数组localodd_arr{1,2,3,4,5}localtarget94localresult9binary_search(odd_arr,target9)print(测试9[1,2,3,4,5] 查找 4 → 索引 ..tostring(result9).. (期望 4))-- 测试用例10重复元素二分查找通常返回任意一个匹配的索引这里假设第一个找到的localduplicate_arr{1,2,2,2,3,4}localtarget102localresult10binary_search(duplicate_arr,target10)print(测试10[1,2,2,2,3,4] 查找 2 → 索引 ..tostring(result10).. (可能是2,3,4中的某一个这里实际是..tostring(result10)..))end-- 运行测试run_tests()