#二分查找法/折半查找法
#include <stdio.h>
#include <string.h>
#include <unistd.h>
//#define DEBUG printf
#define DEBUG
int bsch(int max, int min, int fdata, const int *qm);
int main()
{
int lu[10] = {1,2,3,4,5,6,7,8,9}; //是{},不是[]
int fdata;
int len,max,min;
int ret;
scanf("%d",&fdata); //不是fdata = scanf("%d",&fdata);
max = sizeof(lu)/4 - 1; //注意max-1
min = 0;
ret = bsch(max,min,fdata,lu);
if(ret <0){
printf("not have this data \n\r");
return -1;
}
printf("the data was in lu[%d] \n\r",ret);
return 0;
}
int bsch(int max, int min, int fdata, const int *qm)
{
int middle;
DEBUG("fdata = %d \n\r",fdata);
while(1){
middle = (max-min)/2 + min; //注意+min
//sleep(1);
DEBUG("middle = %d \n\r",middle);
DEBUG("middle = %d \n\r",max);
DEBUG("middle = %d \n\r",min);
if(qm[middle] == fdata){
return middle;
}
else if(qm[middle] > fdata){
max = middle;
}
else{
min = middle;
}
if( (max-min) ==2){ //剩2个时直接对比min和max
if(qm[max] == fdata)
return max;
else if(qm[min] == fdata)
return min;
else
return -1;
}
}
}