二分法查找元素位置
普通二分法查找元素:
#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;}
显示结果:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。