简单查找算法小结:
前两种是线性查找及及其改进版,都比较的简单,在这里就不多做介绍了,算法的最低效率为O(n).
long linearSearch(Type* arr,long len,Type target)
{
long i=0,ansPos;
ansPos=-1;
for(i=0;i<len;i++)
if(arr[i]==target)
{
ansPos=i;
break;
}
return ansPos;
}
//a linear search with a sorted list
long linearSearch2(Type* arr,long len,Type target)
{
long i,ansPos;
ansPos=-1;
for(i=0;i<len;i++)
if(arr[i]>=target)
{
ansPos=i;
break;
}
if(arr[i]>target)
{
ansPos=-1;
printf("/n data not found./n");
}
return ansPos;
}
二分查找法,是Conquer and Divide思想的简单而又生动的一个实现,它在最慢情况下的运行效率为O(logn) ,(log 表示以2为底的对数函数)
参
http://blog.csdn.net/emilmatthew/archive/2005/08/07/447725.aspx
long bSearch(Type* arr,long len,Type target)
{
long l,u,m,ansPos;
assertF(arr!=NULL,"in bSearch,arr is NULL/n");
l=0;u=len-1;ansPos=-1;
while(l<=u)
{
m=(l+u)/2;
if(target<arr[m])
u=m-1;
else if(target==arr[m])
{
ansPos=m;
break;
}
else
{
l=m+1;
}
}
if(ansPos==-1) printf("/nIn bsearch,data not founc/n");
return ansPos;
}
测试:
当数据量达到10,000,000时,线性查找及改进的线性查找算法的平均消耗时间单位在0.01秒的级别,而二分查找的平均消耗时间仍为0.0000s,也就是万分之一秒这个等级下.