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

二分查找法

时间:2017-09-08 13:33:15      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:size   dep   完全   div   clu   不难   eof   span   scanf   

  书上习题有要求用递归和迭代实现一个二分查找算法,随即写了一个,但对于找不到的部分没怎么处理...感觉不是很好处理。

  示例代码:

#include<stdio.h>

int binarySearch(int nums[], int left, int right, int X)    //迭代法
{
    int mid;

    mid = (left + right) / 2;
    while(X != nums[mid])
    {
        if(X > mid)
            mid = (mid + right) / 2;
        else
            mid = (left + mid) / 2;
    }

    return nums[mid];
}

void main()
{
    int arr[] = {1, 2, 3, 4, 5, 6}, arrSize;
    int X;

    arrSize = sizeof(arr)/sizeof(int);
    scanf("%d", &X);
    printf("%d\n", binarySearch(arr, 0, arrSize, X));
}
//感觉好像没什么可说的,毕竟不难
#include<stdio.h>

int BinarySearch(int nums[], int numsFirst, int numsSize, int X)
{
    int numsMid;

    numsMid = (numsFirst + numsSize)/2;
    if(X < nums[numsMid])
        return BinarySearch(nums, numsFirst, numsMid, X);
    else if(X > nums[numsMid])
        return BinarySearch(nums, numsMid, numsSize, X);
    else
        return nums[numsMid];
}

void main()
{
    int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int numsSize;

    numsSize = sizeof(num)/sizeof(int);
    
    printf("%d\n", BinarySearch(num, 0, numsSize, 7));
}

  因为二分查找算法思想就像一颗完全二叉树,深度depth = lg(n)+1,n为问题规模,递归子问题为2,因此以上两段代码的时间复杂度都为O(lgn)。

二分查找法

标签:size   dep   完全   div   clu   不难   eof   span   scanf   

原文地址:http://www.cnblogs.com/darkchii/p/7493801.html

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