二分查找法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找法相关的知识,希望对你有一定的参考价值。
#include <iostream> #include <stdio.h> #include <malloc.h> #include <string.h> using namespace std; /** * 二分查找,要求输入数列有序方可查询。常用于变动比较小的数据,且有序。时间复杂度可以表示O()=O(logN) * 返回查找值所在的下标 (此为升序) * * start指向数组待查范围的起始元素,end指向数组待查范围的最后一个元素,middle=(start+end)/2。开始时待查范围为整个数组。 比较array[middle]与查找元素的大小关系: 如果array[middle]等于查找元素,则查找成功 如果array[middle]大于查找元素,则说明待查元素在数组的前半部分,此时缩小待查范围,令end = middle-1 如果array[middle]小于查找元素,则说明待查元素在数组的后半部分,此时缩小待查范围,令start = middle +1 重复执行前面两步,直到array[middle ] 等于查找元素则查找成功或start>end查找失败。 */ int binary_search(const int arr[],int start, int end, int value) { if(start > end) return -1; int mid = start + (end - start) / 2; //middle=(start+end)/2: start+end容易溢出 if(arr[mid] == value) return mid; //递归查找 return (arr[mid] > value ? binary_search(arr,start, mid-1, value) : binary_search(arr,mid+1, end, value)); } int main() { int a[]={10,22,42,51,56,63,78,99,102,110,123,134}; int result = binary_search(a,0, sizeof(a)/sizeof(int), 102); printf("%d\n",a[result]); }
以上是关于二分查找法的主要内容,如果未能解决你的问题,请参考以下文章