二分搜索应用

来源:互联网 发布:网络教育去哪报名? 编辑:程序博客网 时间:2024/06/14 18:04

1 从有序数组中查找数组中比某个数大的或比某个数小的第一个数

用二分搜索查找数组中比某个数大的或比某个数小的第一个数。例如在数组中查找比7大的数为8,比7小的数为6,如果能查找到则返回对应数的索引。如果返回的索引查处的数组sums的取值范围说明没找到合适的值

0 1 2 3 4 5 0 2 5 6 8 12

-查找比某个数大的第一个数Python代码如下

def searchFirstBigThan(left, right, key, sums):    while(left <= right):        mid = (left + right) / 2        if(sums[mid] >= key):            right = mid - 1        else:            left = mid + 1    return left
  • 查找比某个数小的第一个数的Python代码为:
def searchFirstLessThan(left, right, key, sums):    while(left <= right):        mid = (left + right) / 2        if(sums[mid] <= key):            left = mid + 1        else:            right = mid - 1      return right

测试代码

sums=[0,2,5,6,8,12,15]r = searchLessThan(0, 6, 16, sums)

2 从部分排序的数组中找出最小值

例如数组num=[6,7,8,9,-4,-3,-2,-1,0],其中子数组[6,7,8,9]和[-4,-3,-2,-1,0]是有序的。[-4,-3,-2,-1,0]与[6,7,8,9]合并在一起是整个有序的。要求从[6,7,8,9,-4,-3,-2,-1,0]中找出最小值-4。用二分查找,low与up分别指向数组的首尾,mid=(low+up)/2,如果num[mid]>num[up],说明最小值在[mid+1,up]间,关系low=mid+1,如果num[mid]

def searchMin(num):    low = 0    up = len(num) - 1    while(low < up):        mid = (low + up) / 2        if(num[mid] > num[up]):            low = mid + 1        elif(num[mid] < num[up]):            up = mid    return low

测试代码

sums = [6,7,8,9,-4,-3,-2,-1,0]r = searchMin(sums)
0 0
原创粉丝点击