`
huaerfan
  • 浏览: 11760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

python实现二分查找算法

阅读更多

  二分算法的定义不在多说了,百度一下就知道(支持国产大笑

import sys
source = [1,2,3,4,5,6,7,8,9,10] #must be in order
des = int(sys.argv[1])
low = 0
high = len(source) - 1
targetIndex = -1
print "des=",des
while low <= high:
    middle = (low + high)/2
    if des == source[middle]:
        targetIndex = middle
        break
    elif des < source[middle]:
        high = middle -1
        print "middle element[index=",middle,",value=",source[middle],"] is bigger than des, continue search from[",low,"to",high,"]"
    else:
        low = middle + 1
        print "middle element[index=",middle,",value=",source[middle],"] is smaller than des, continue search from[",low,"to",high,"]"
print "search complete, target element's index in source list is ",targetIndex

 运行结果如下:

 

  • 大小: 5.2 KB
1
3
分享到:
评论
2 楼 huaerfan 2013-09-08  
jianghu52 写道
楼主你好。我按照你的代码打出来了。有个地方想请教一下。为什么
des = int(sys.argv[1]) 这里一定要强转int。我实验过了。如果不强转确实不行。但是原因是为什么呢?不是很理解这个sys.argv这个函数,虽然知道怎么用。
另外,我还试验过source = ["1","2","3","4","5","6","7","8","9","10"]这种写法,这个时候不强转des就是可以的。同样,这个时候如果强转des为int的话,反而也不行。

我也是刚学的python,使用type()方法可以看出sys.argv获取到的参数是str类型的,而str类型与int类型相比较,引起的结果我还无法确定,还得多学习
1 楼 jianghu52 2013-09-08  
楼主你好。我按照你的代码打出来了。有个地方想请教一下。为什么
des = int(sys.argv[1]) 这里一定要强转int。我实验过了。如果不强转确实不行。但是原因是为什么呢?不是很理解这个sys.argv这个函数,虽然知道怎么用。
另外,我还试验过source = ["1","2","3","4","5","6","7","8","9","10"]这种写法,这个时候不强转des就是可以的。同样,这个时候如果强转des为int的话,反而也不行。

相关推荐

Global site tag (gtag.js) - Google Analytics