普通二分法查找元素:

#include<stdio.h>#include<stdlib.h>intBinarySearch(int*a,intn,intpos){intleft=0;intright=n-1;while(left<=right){intmid=left+(right-left)/2;if(pos==a[mid]){returnmid;}elseif(pos<a[mid]){right=mid-1;}else{left=mid+1;}}return-1;}intmain(){intarr[10]={1,2,3,4,5,6,7,8,9,10};intret=BinarySearch(arr,10,5);printf("pos:%d\n",ret);system("pause");return0;}

显示结果:

那如果是查找数组中第一次出现的那个元素,这种方法显然是不可行。

就需要修改一小下下

#include<stdio.h>#include<stdlib.h>intBinarySearch(int*a,intn,intpos){intleft=0;intright=n-1;while(left<=right){intmid=left+(right-left)/2;if(pos==a[mid]){while(mid-1>=0&&pos==a[mid-1]){mid=mid-1;}returnmid;}elseif(pos<a[mid]){right=mid-1;}else{left=mid+1;}}return-1;}intmain(){intarr1[10]={1,2,3,4,5,6,7,8,9,10};intarr2[13]={1,2,3,4,5,5,5,5,6,7,8,9,10};intret1=BinarySearch(arr1,10,5);intret2=BinarySearch(arr2,10,5);printf("pos1:%d\n",ret1);printf("pos1:%d\n",ret2);system("pause");return0;}

显示结果: