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])