二分查找
阿新 • • 發佈:2017-06-08
binary-search 二分查找 折半查找
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])
本文出自 “coding” 博客,請務必保留此出處http://xtceetg.blog.51cto.com/5086648/1933292
二分查找