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

[01]Binary Search二分查找

时间:2020-02-17 12:05:44      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:item   代码   guess   返回值   函数返回值   perm   直接   python   作用   

Binary Search二分查找

作用:二分查找适用于有序的的数组或列表中,如果列表及数组中有n个元素,通过二分查找查询某一元素的位置需要的步骤是log2(n)(注:该log的底数是2)

1.Python实现

def binary_search(list,item):  
    low = 0  
  high = len(list)-1 #python数组ID从0开始,与matlab不同、  
  t = 0  
  while low <= high:  
        t = t + 1;  
        mid = round((low + high)/2)  
        guess = list[mid]  
        if guess == item:  
            return (mid,t)  
        if guess > item:  
            high = mid-1  
  else:  
            low = mid + 1  
  return None #python关键字None,相当于matlab的NaN  
my_list = range(1,101)  
value = binary_search(my_list,1)  
print ("Search Num:",value[1],Index Position,value[0])

运行后结果:

Search Num: 6 Index Position 0

注意事项:

  • python定义的函数、使用如if、while、for时在语句后使用分号‘;‘
  • 列表元素索引从0开始;
  • 如果定义的函数具有返回值,那么返回值通过关键字‘return‘实现函数输出,可多输出,如果调用函数返回值,可通过查询对应返回值索引,查找所需的函数返回值;
  • 求中间索引位置时,防止出现查询调用时索引计算出现小数,通过round函数进行四舍五入处理;

2.Matlab实现  

函数实现代码:

function [count,out] = binary_search(list,item)
%list:所要查找的数组一维行向量
%item:查找的元素
low = 1;
high = length(list);
t = 0;
while low <= high
    t = t+1;
    mid = round((low+high)/2);
    guess = list(1,mid);
    if guess == item
        out =  mid;
        count = t;
        break;
    else if guess > item
            high = mid - 1;
            if high<low
                out = ‘None‘;
                break;
            end
        else
            low = mid + 1;
            if high<low
                out = ‘None‘;
                break;
            end
        end
    end
end

 

测试用代码:

n = 100;
data = randperm(n);
data = sort(data);
[t,v] = binary_search(data,100);
str = [‘search num:‘,num2str(t),‘;   ‘,‘Index Position:‘,num2str(v)];
disp(str);

 

运行后结果:  

search num:6;   Index Position:100

 

注意事项

  • Matlab数组元素索引从1开始,这点与python不同;
  • 函数返回值在定义函数时直接定义;

 

[01]Binary Search二分查找

标签:item   代码   guess   返回值   函数返回值   perm   直接   python   作用   

原文地址:https://www.cnblogs.com/GavinDu/p/12320894.html

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