二分法检索先容
二分法检索(binary search)又称折半检索,二分法检索的根基思想是设字典中的元素从小到大有序地存放在数组(array)中,
首先将给定值key与字典中间位置上元素的要害码(key)较量,假如相等,则检索乐成;
不然,若key小,则在字典前半部门中继承举办二分法检索;
若key大,则在字典后半部门中继承举办二分法检索。
这样,颠末一次较量就缩小一半的检索区间,如此举办下去,直到检索乐成或检索失败。
偶数个取中间2个个中任何一个作为中间元素
二分法检索是一种效率较高的检索要领,要求字典在顺序表中按要害码排序。
代码实例:
#!/usr/bin/env python import sys def BinarySearch(haystack, needle): low = 0 high = len(haystack) - 1 while(low <= high): mid = (low + high)/2 midval = haystack[mid] if midval < needle: low = mid + 1 elif midval > needle: high = mid - 1 else: print mid return mid print -1 return -1 if __name__ == "__main__": haystack = [int(i) for i in list(sys.argv[1])] needle = int(sys.argv[2]) BinarySearch(haystack ,needle)
运行:
[email protected]:~$ python BinarySearch.py 123456789 4 3
备注:
1.'__':由于python的类成员都是公有、果真的被存取public,缺少像正统面向工具语言的私有private属性。
于是就用__来迁就一下,模仿私有属性。这些__属性往往是内部利用,凡是环境下不消改写。也不消读取。
加上2个下划线的目标,一是反面普通公有属性重名斗嘴,二是不让工具的利用者(非开拓者)随意利用。
2.__name__ == "__main__"暗示措施剧本是直接被执行的.
假如不便是暗示剧本是被其他措施用import引入的.则其__name__属性被设为模块名