1. 程式人生 > >二分查找

二分查找

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

二分查找