二分查找

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章