算法题每日一练----快速写二分法排序

说下我对于二分法查找的理解:【和猜数字游戏差不多】

要在一个有序数列中找到一个与对应给定数字。

1、找到有序数列中最中间的数字

2、若中间值大于给定值,则在左边数列重新二分查找

3、若中间值小于给定值,则在右边数列重新二分查找

4、若都不存在,则返回‘没有对应的匹配值’

【索引思想】

1、设置最大和最小索引,找到中间索引值

2、若中间索引值大于给定值,则中间索引位置前一位变为最大索引位置,最小索引位为0;

3、若中间索引值小于给定值,则中间索引位置下一位变为最小索引位置,最大索引位不变;

4、若都不存在,则返回‘没有对应的匹配值’

def searchBinary(arr, number):
    low = 0
    height = len(arr)-1
    while low <= height:
        mid = int((low+height)/2)
        if arr[mid] > number:
            height = mid-1
        elif arr[mid] < number:
            low = mid+1
        else:
            return mid
    return '没有匹配值'

递归思想

def searchBinary(arr, number,low,height):
    if low <= height:
        mid = int((low+height)/2)
        if arr[mid] == number:
            return mid
        elif arr[mid] >= number:
            return searchBinary(arr, number, 0, mid-1)
        else:
            return searchBinary(arr, number, mid+1, height)
    else:
        return '没有匹配'

 

你可能感兴趣的:(面试题目总结)