用最少的运算次数找出数据位置,基础思路。1000个数据,第一次判定是前500还是后500,第二次是前250还是后250.这样1000个数据很快就可以查完。
uint8 FineTab(uint16 *a,uint8 TabLong,uint16 data)//表中数据从大到小
{
uint8 st,ed,m ;
uint8 i ;
st = 0 ;
ed = TabLong-1 ;
i = 0 ;
if(data >= a[st]) return st ;
else if(data <= a[ed]) return ed ;
while(st < ed)
{
m = (st+ed)/2 ;
if(data == a[m] ) break ;
if(data < a[m] && data > a[m+1]) break ;
if(data > a[m]) ed = m ;
else st = m ;
if(i++ > TabLong) break ;
}
if(st > ed ) return 0 ;
return m ;
}
|