什么是二分查找
二分查找又称作折半搜索算法,是一种在有序数组中查找某一个特定元素的搜索算法;二分查找的平局时间复杂度为O(logn)。
根据实际问题来讲解二分查找
问题1:查找有序递增数组中的特定元素
查找有序递增数组中的某一个数;
从有序递增数组的中间开始,如果中间的数值刚好是要查找的数,搜索就结束;
否则,将中间的数值跟搜索的数作对比,如果中间的数比搜索的数要大,那下一次查找的范围在左边,如果中间的数比搜索的数要小,那下一次查找的范围在右边;
进入下一个范围后,再次进行上面的2,3步骤操作,直到搜索到相等的数值或者数组为空。
列如:有序递增数组a=[1,4,4,5,6],特定元素是5。L为最左边位置,R为最右边位置,M为[L,R]区间内的中间位置。
第一次比较为:L=0,R=4,M=2,a[M]比特定值5小,区间往右边搜索,所以L=M+1,最左边的位置往中间值下一位;L=3,R=4,M=3,a[M]与特定值5相等,结束搜索。
如下图所示:
上述是最基础的二分查找问题,核心思想。
//查找有序递增数组中的特定元素int BinarySearch(int *pArrayNum, int nCount, int nValue) {
int nLeft = 0; int nRight =