码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找法

时间:2017-09-12 16:53:48      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:iostream   namespace   数据   nbsp   binary   ret   class   ring   关系   

#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]);

}

 

二分查找法

标签:iostream   namespace   数据   nbsp   binary   ret   class   ring   关系   

原文地址:http://www.cnblogs.com/linuxAndMcu/p/7510893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!