编程语言
首页 > 编程语言> > 查找算法:二分法变种

查找算法:二分法变种

作者:互联网

大家都很熟悉二分法查找算法,但是例如[5,6,7,1,2,3,4]这样一个不完全有序数组,是否可以使用二分法的思想进行查找呢?

这一数组可以看作是由一个完全有序的数组翻折得到的。或者可以理解成两个有序数组,且第二个数组的最大值小于第一的最小值,我们将其拼接,拼接成了一个不完全有序的数组,在这个数组中我们需要找到 target ,找到后返回其索引,如果没有找到则返回-1。

def spc_binary_search(nums, target):
    left = 0
    right = len(nums) - 1
    while left <= right:
        mid = (right + left) // 2
        if nums[mid] == target:
            return mid
        if nums[mid] >= nums[left]:
            if nums[mid] > target and target >= nums[left]:
                right = mid - 1
            elif target > nums[mid] or target < nums[left]:
                left = mid + 1
        elif nums[mid] < nums[left]:
            if nums[mid] < target and target <= nums[right]:
                left = mid + 1
            elif target < nums[mid] or target > nums[right]:
                right = mid - 1
    return -1
nums = [5, 6, 7, 1, 2, 3, 4]
target = 6
spc_binary_search(nums, target)

欢迎大家转发,一起传播知识和正能量,帮助到更多人。辛苦大家转发时注明出处(也是咱们公益编程交流群的入口网址):http://liujingwei.cn

标签:right,target,nums,变种,mid,二分法,查找,数组,left
来源: https://blog.csdn.net/liujingwei8610/article/details/117302332