//通过二分查找法在一个已经排好序的数组查找值
#include<stdio.h>
//定义二分查找的函数(递归函数)
//基本思路:
//1.将被查值与数组中间值相比较
//2.被查值>中间值,在数组右边继续重复上述操作;被查值<中间值,在数组左边继续重复上述操作
//3.直到被查值与中间值相等,输出中间值
int two(int arr[],int left,int right,int scan){//参数分别为,数组、最左下标值、最右下标值(用于求出中间下标从而求出中间值)、被查值
int middle;
if(left>right){//该语句很重要,用于判断被查值找不到的情况。由于左右下标不断减小,如果数组中没有被查值则left最终一定小于right
return -1;
}
middle = (left+right)/2;//中间值
if(scan>arr[middle]){//判断被查值与中间值的大小
two(arr,middle+1,right,scan);//被查值大,查找区域转移至右边
}else if(scan<arr[middle]){//判断被查值与中间值的大小
two(arr,left,middle-1,scan);//被查值大,查找区域转移至左边
}else{
return middle;//当被查值和中间值相等的时候,返回此时的中间值
}
}
void main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int arrlen,scan,resualt;
printf("请输入一个数:");
scanf("%d",&scan);
arrlen = sizeof(arr)/sizeof(int);//算出数组以元素为单位的大小(一劳永逸)
resualt = two(arr,0,arrlen-1,scan);
if(resualt==-1){
printf("没有找到!\n");
}else{
printf("找到了:%d\n",resualt);
}
}
09-10
1万+
04-30
1332