#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
__author__ = 'Zhang Shuai'
def binary_search(L, x):
i = 0
j = len(L)-1
res = j
if(L[j]<=x):
print( -1)
return
while i<=j:
mid = (i+j)//2
if x<L[mid]:
res = mid
j = mid -1
else:
i = mid+1
print("res=", res,"第一个比%s大的数为" %x,L[res])
a= [3,6,7,7,9,10,13]
binary_search(a, 0)
binary_search(a, 2)
binary_search(a, 3)
binary_search(a, 6)
binary_search(a, 7)
binary_search(a, 12)
binary_search(a, 15)
结果:
res= 0 第一个比0大的数为 3
res= 0 第一个比2大的数为 3
res= 1 第一个比3大的数为 6
res= 2 第一个比6大的数为 7
res= 4 第一个比7大的数为 9
res= 6 第一个比12大的数为 13
-1
好像写复杂了,下面这个效果一样。
def binary_search(L, x):
i = 0
j = len(L)-1
if(L[j]<=x):
print( -1)
return
while i<j:
mid = (i+j)//2
if x<L[mid]:
j = mid
else:
i = mid+1
print("j=", j,"第一个比%s大的数为" %x,L[j])