zoukankan      html  css  js  c++  java
  • Binary search

    Binary Search




    Jon Bentley以前说过类似的话:“90%的程序猿无法正确实现二分查找算法



    就冲着这句话去写binary search


    binary_search 的算法实现部分

    /*********************************************************
    code writer	:	EOF
    code file	:	binary_search.c
    code date	:	2014.9.18
    e-mail		:	jasonleaster@gmail.com
    
    description:
    	You may have to KNOW that the @array was
    sequenced from min to max  when you use "binary search".
    
    	If this function find the element , return the
    location in the @array, otherwise return -1.
    
    ********************************************************/
    #include <stdio.h>
    
    int binary_search(int* array,int size,int element)
    {
    	if(!array)
    	{
    		printf("You passed NULL into function: %s()
    ",__FUNCTION__);
    		return -1;
    	}
    
    	int low = 0;
    	int mid = 0;
    	int high= 0;
    
    	for(low = 0,high = size-1;low <= high;)
    	{
    		mid = (low+high)/2;
    		
    		if(array[mid] < element)
    		{
    			low = mid+1;
    		}
    		else if(array[mid] > element)
    		{
    			high = mid-1;
    		}
    		else
    		{
    			/*
    			** 	found that.
    			*/
    			return mid; 
    		}
    	}
    
    	return -1;
    }


    測试用程序

    #include <stdio.h>
    #include "binary_search.h"
    
    int main()
    {
    	int number[10] = {0,2,6,8,10,15,18,40,99};
    
    	int what_i_want = 18;
    	int ret = 0;
    
    	ret = binary_search(number,sizeof(number)/sizeof(number[0]),what_i_want);
    
    	if(ret < 0)
    	{
    		printf("Not found!
    ");
    		return 0;
    	}
    
    	printf("location:%d number[%d]:%d
    ",ret,ret,number[ret]);
    
    	return 0;
    }




    update:2015.1.8

    加入python版本号的实现

    '''
    Code writer : EOF
    Code date   : 2015.01.08
    Code file   : bs.py
    e-mail      : jasonleaster@gmail.com
    
    Code description:
           Here is a implementation for 
    how to do binary search in Python.
    
    '''
    def binary_search(array, element):
    
        high = len(array)
        mid = -1
        for low in range(len(array)) :
            mid = (low + high)/2
    
            if array[mid] < element :
                 low  = mid + 1
            elif array[mid] > element :
                 high = mid - 1
            else :
                 return mid
    
        return -1
         
    def main():
        number = [1,2,3,4,5]
    
        print number
        print number[binary_search(number,3)]
    
    main()












    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    poj2528 Mayor&#39;s posters(线段树,离散化)
    管理线程之等待线程结束
    linux下使用DBCA(database configuration assistant)创建oracle数据库
    POJ 1765 November Rain
    PC端 java 开发蓝牙所遇到的问题
    CentOS 安装SVNclient
    unity3d 延迟运行脚本语句
    Q13.cocoapod_卡在“analyzing_depengcies”问题解决
    深度学习与计算机视觉系列(10)_细说卷积神经网络
    【COGS1672】【SPOJ375】QTREE
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4620681.html
Copyright © 2011-2022 走看看