C++实现二分查找
维基百科:二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
时间复杂度为。(n代表集合中元素的个数)
空间复杂度。虽以递归形式定义,但是尾递归,可改写为循环。
#include<iostream>usingnamespacestd;#include<assert.h>//方法1:区间为[]/*intBinarySearch(int*a,intsize,intx){assert(a);intleft=0;intright=size-1;while(left<=right){intmid=left+(right-left)/2;if(a[mid]<x){left=mid+1;}elseif(a[mid]>x){right=mid-1;}else{returnmid;}}return-1;}*///方法2:区间为[)intBinarySearch(int*a,intsize,intx){assert(a);intleft=0;intright=size;while(left<right){intmid=left+(right-left)/2;if(a[mid]<x){left=mid+1;}elseif(a[mid]>x){right=mid;}else{returnmid;}}return-1;}voidTest(){intarray[]={0,1,2,3,4,5,6,7};cout<<BinarySearch(array,sizeof(array)/sizeof(array[0]),0)<<endl;}intmain(){Test();return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。