Binary-Search 二分查找又称折半查找,用于不经常变动而查找频繁的有序列表,查询速度快。
1、首先需要对列表进行升序排列
2、将列表中的关键字与查找关键字比较,如果相等则查找成功。否则将列表从中间分成两部分,如果中间记录关键字大于查找关键字,则往中间关键字左边查找,否则往右边查找。
下面先来看一下伪代码
a=[1,2,3,4,5]
function rank(array,key){
array.sort();//先对array排序
min = 0;
max = len(array)-1//数组的长度减一
while(min<=max){
mid = min+(max-min)/2;//计算中间位置下标
if(key>array[mid]){
//如果查询关键字大于中间关键字,则往右查询 最小查询下标=中间下标+1
min=mid+1;
}elseif(key<array[mid]){
//如果查询关键字小于中间关键字,则往左查询 最大查询下标=中间下标-1
max=mid-1;
}else{
//如果相等,则返回查询到的关键字下标。
return mid;
}
}
//如果整个数组没有查询到关键字,则返回-1;
return -1;
}
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def binarySearch(myList, key):
myList.sort()
lo = 0
hi = len(myList) - 1
while lo <= hi:
mid = lo + int((hi - lo) / 2)
if key > myList[mid]:
lo = mid + 1
elif key < myList[mid]:
hi = mid - 1
else:
return mid
return -1
a = [10, 2, 3, 1, 23, 14, 25, 68, 72, 81, 33, 56, 98, 102, 77, 56, 7, 4, 5]
num = rank(a, 68)
a.sort()
print(a[num])
转载于:https://blog.51cto.com/xtceetg/1933292