二分查找

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

点赞