算法

1.问题: 在[1, 2, 3, 4, 5, 6]中,找出满足 x*x > target的最小的数;

2.    l          r        mid        array[mid]         flag(指针)       target

      0         5         2           9                       -1                    15    

      3         5         4           25                      4                    15    

      3         3         3           16                      3                    15    

3.代码

#  [1, 2, 3, 4, 5, 6]; target 15
import time


def compare_two(num_1, target):
    return num_1 * num_1 > target


def my_binary_search(array, target):
    flag = -1
    l, r = 0, len(array) - 1
    while l <= r:
        mid = (l+r) // 2
        print('mid: is {}   - l: {} - r: {}  - array[mid]: {}'.format(mid, l, r,array[mid]))
        time.sleep(3)
        if compare_two(array[mid], target):
            r = mid -1
            flag = mid
        else:
            l = mid + 1
    if flag == -1:
        return -1
    else:
        return array[flag]



my_array = [1, 2, 3, 4, 5, 6]
print(my_binary_search(my_array, 0))
用一个例子来演示会更加清晰
原文地址:https://www.cnblogs.com/hixiaowei/p/14359910.html