您的位置:首页 > 其它

二分查找

2016-07-27 19:00 190 查看
找第一个大于的数

function shuilu:FindInster(obj, compfunc)  --找到左边第一个比自己大的
local res = #self.sorttab + 1 --找不到就尾部插入
local left = 1
local right = #self.sorttab
while left <= right do
local  mid = left + ((right - left ) >> 1)
if compfunc(self.sorttab[mid], obj) then
left = mid + 1
else
res = mid
right = mid - 1
end
end
return res
end


找相等的

function shuilu:FindIndex(obj, compfunc)
local left = 1
local right = #self.sorttab
local mid = (left + right) // 2
while left ~= mid do
if self.sorttab[mid].teamkey == obj.teamkey then
break
elseif compfunc(self.sorttab[mid], obj) then
left = mid + 1
else
right = mid -1
end
mid = left + ((right + left ) >> 1)
end
if self.sorttab[mid].key ~= key then
return
end
return mid, self.sorttab[mid]
end


--二分查找
function binfind(t, rand)
assert(#t > 0)
local left = 1
local right = #t
while left <= right do
local mid = left + ((right - left ) >> 1)
if mid == 1 and  t[mid].rate >= rand then
return t[mid]
end
if t[mid].rate < rand and t[mid +1].rate >= rand then
return t[mid +1]
elseif  t[mid].rate >= rand then
right = mid - 1
else
left = mid + 1
end
end
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: