#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[]={1,2,3,4,5,6,6,6,6,6};
int begin=0;
//sizeof()用来计算当前数组字节大小
int end=sizeof(arr)/sizeof(int)-1;
int find=6;
while(begin<=end){
int middle=(begin+end)/2;
if(find<arr[middle]){
end=middle-1;
}else if(find>arr[middle]){
begin=middle+1;
}else{
printf("找到了下标为:%d\n",middle);
int temp=middle-1;
while(1){
if(arr[temp]!=find||temp<0){
break;
}
printf("找到了下标为:%d\n",temp--);
}
temp=middle+1;
while(1){
if(arr[temp]!=find||temp>(sizeof(arr)/sizeof(int))-1){
break;
}
printf("找到了下标为:%d\n",temp++);
}
return;
}
}
printf("没有找到");
return 0;
}
二分法排序:每次将顺序的数组,取中间值,如果要查找的数大于中间值,则将中间值前面的数退出比较,再取中间值后面的数进行比较,将中间值取位start再找新的中间值,直到找到查找的数,也是一种递归调用的思想