找第一个大于的数
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