二分查找:
查找要求线性表必须采用顺序存储结构,而且表中元素有序排列。
下面代码是C语言,采用了递归,非常简洁明了。
#include <stdio.h>
int check(int left, int right , int target , int arr[]);
int main() {
int amy[] = {2,5,6,8,12,26,34,45,48,56,73,88,90};
int len = sizeof(amy)/sizeof(amy[0]);
int x = 0;
scanf("%d", &x); //输入要查询的数字
int h = check(0,len-1,x,amy); //调用check函数
if( h == -1 ){
printf("很抱歉,没有您要寻找的数字!\n");
}else{
printf("您要寻找的数字,index为%d\n", h);
}
return 0;
}
int check(int left, int right, int target ,int arr[]) {
int flag = 0; //单一出口原则,设置flag
if(left > right){ //如果左边界限的index大于右边界限的index,说明没有找到该数,返回-1
flag = -1;
}else{
int mid = (left+right)/2;
if( arr[mid] > target ){ //说明n在arr[mid]的左边,此时right的界限
right = mid-1; //应该变为 0 ~ [mid-1]
flag = check(left, right, target, arr);
}else if( arr[mid] < target ){ //说明n在arr[mid]的右边,此时left的界限
left = mid+1; //应该变为 [mid+1] ~ right
flag = check(left, right, target, arr);
}else{
flag = mid;
}
}
return flag;
}