折半查找(顺序查找)
代码如下:
#include<stdio.h>
int Binsearch(int arr[],int len,int key)//arr[]:数组,len:数组长度,key:所要找的数字
{
int low = 0;//最小值的下标
int high = len - 1;//最大值的下标=长度-1,因为下标是从0开始,长度从1开始
int mid;
while(low <= high)//在low和high错位或相等时退出循环
{
mid = (low + high) / 2;//中间下标
if(arr[mid] == key)
{
return mid;//将数组下表返回给主函数
}
else if(arr[mid] < key)//往右找
{
low = mid + 1;//由于已经排除改下表所对应的数字,则进行下一位
}
else//往左找
{
high = mid - 1;//由于已经排除改下表所对应的数字,则进行上一位
}
}
return -1;//表示没有该数字
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12};
for(int i = 0;i <15;i++)
{
printf("%d\n",Binsearch(arr,sizeof(arr)/sizeof(arr[0]),i) );
}
return 0;
}