线性搜索没有效率,引入二分搜索,二分搜索的效率为log2N。
#include<stdio.h>
int search(int k, int a[], int len)
{
int ret =-1;
int left = 0;
int right = len-1;
while(right>left)
{
int mid = (left+right)/2;
if(a[mid]==k)
{
ret = mid;
break;
}else if(a[mid]>k)
{
right = mid - 1;
ret = right;
}else{
left = mid + 1;
ret = left;
}
}
return ret;
}
int main()
{
int k = 41;
int a[] = {3,12,23,25,34,35,41,43,51,}; //二分搜索的前提是数组为升序排列
int r = search(k,a,sizeof(a)/sizeof(a[0]));
printf("%d\n",r);
return 0;
}
注:二分搜索的前提条件是给出的数组元素必须是升序排列