折半查找也称二分查找,是一种在有序数组中查找某一特定元素的搜索算法,每一次查找,搜索范围均缩小一半,效率较高。如果数组是乱序状态,则应排序,再进行查找。
搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半 。
log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn)。
二分查找只需要额外存储三个变量:最大值 ,最小值 和 中点,空间复杂度为常数 O(1)。

- #include
- using namespace std;
- int binarySearch(int array[],int len,int target) {
- int left=0;
- int right=len-1;
- while(left<=right){
- int mid=(right+left)/2;
- if(array[mid]==target){
- return mid;
- } else if(array[mid]
- left=mid+1;
- } else if(array[mid]>target){
- right=mid-1;
- }
- }
- return -1;
- }
-
- int main()
- {
- int array[]={2,3,4,5,15,19,26,27,36,38,45};
- int key = 0,ret;
-
- printf("请输入需要查找的数字:");
- cin>>key;
-
- ret=binarySearch(array,sizeof(array)/sizeof(int),key);
- if(ret<0)
- printf("查找失败\n");
- else
- printf("该数字为数组第%d个元素\n",ret+1);
-
- return 0;
- }
-
运行结果:
你的点赞、关注是我创作的最大动力(^_^)
如果有不懂的的问题,可以留在评论区里,我会尽快回复的(✪ω✪)