您的位置:首页 > 其它

Binary search

2015-07-04 14:52 423 查看

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()\n",__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!\n");
return 0;
}

printf("location:%d number[%d]:%d\n",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()



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: