二分查找法(折半查找法)
二分法适用于查找目标数据key在一个数组中是第几个元素。相较于遍历查找,二分查找的时间复杂度较低,不容易出现TLE。
注:二分查找仅适用于对已有序的数组(一般为从小到大排序)进行操作!!!若无序先用sort进行排序。
代码如下:
#include <stdio.h>
int BinSearch(int arr[],int len,int key)
{
int low=0,mid,high=len-1;
while(low<=high)
{
mid=(low+high)/2;
if(arr[mid]==key)
return mid;
if(arr[mid]>key)
high=mid-1;
if(arr[mid]<key)
low=mid+1;
}
return -1;//如果数组中无目标数据key,则返回-1
}
int main()
{
int n,arr[]={1,2,3,4,5,6,7,8,9};//假设已用sort排好序
n=BinSearch(arr,sizeof(arr)/sizeof(arr[0]),5);
printf("%d\n",n);
return 0;
}