码迷,mamicode.com
首页 > 编程语言 > 详细

经典算法之二分搜索技术

时间:2015-06-06 12:06:02      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:算法   分治   c   

二分法是个非常经典的算法,是分治思想的很好的体现。在复习算法的过程中,正好把他记录下来。

本来想写递归的,后来想想还是用迭代,效率更高些,虽然对这种小的数据没什么多大影响,(好吧,其实是我太懒了 <-_->!!)

这里有个坑,以前一直没有注意,这里标记一下,调整上下限的时候一定要


low = mid + 1; high = mid - 1; 否则可能遇到相邻的两个数字时候,陷入死循环!!!


代码如下:

// =====================【二分搜索技术 】==================
// @ author         :           zhyh2010
// @ date           :           20150606
// @ version        :           1.0
// @ description    :       
// =====================【二分搜索技术】==================

#include <stdio.h>
#include <stdlib.h>

#define NUM 100
int target_arr[NUM] = { 0 };

void init()
{
    for (int i = 0; i != NUM; i++)
        target_arr[i] = i;
}

int BinarySearch(int low, int high, int target)
{
    printf("target is %d\n", target);
    while (true)
    {
        int mid = (low + high) / 2;
        printf("low = %2d\thigh = %2d\tmid = %2d\n", 
            target_arr[low], target_arr[high], target_arr[mid]);
        if (target == target_arr[mid])
            return mid;

        if (low == high)
            return -1;

        if (target_arr[mid] > target)
            high = mid - 1;
        else
            low = mid + 1;      
    }   
}

void main()
{
    init();
    int id = BinarySearch(0, NUM - 1, 500);
    if (id > 0)
        printf("find it\n");
    else
        printf("not find\n");
}

经典算法之二分搜索技术

标签:算法   分治   c   

原文地址:http://blog.csdn.net/zhyh1435589631/article/details/46386885

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