旋转数组的二分查找

本文介绍了如何在旋转数组中进行二分查找,通过分析旋转数组的特点,将问题分解为判断中间元素所在的部分,再根据目标值的位置进行针对性的二分搜索。详细解释了在不同情况下的边界处理,并给出了相应的程序代码,实现时间复杂度为log(n)的查找算法。
摘要由CSDN通过智能技术生成
旋转数组是指原来排好序的数组经过旋转后形成局部有序的数组,形如【4,5,6,7,1,2,3】就是【1,2,3,4,5,6,7】经过旋转后得到的数组。
题目:给定一个数x能否在log(n)内找到这个数是否存在于旋转数组中

分析:
这个题目的难点在于如何二分地查找一个数,显然局部有序这个条件是十分有用的。我们先定义数组的左边部分为从左往右一直递增的数组,如上诉例子的左边部分为【4,5,6,7】。数组的右边部分为除了左边部分的其他,如上边的例子为【1,2,3】,很容易发现,左右两部分都各自是递增序列。我们可以先判断数组的中间的那个数(整个数组的中间的数设为mid)在哪个部分,通过mid和数组最左边的数(设为start)比较即可得到mid位于哪部分,如果mid>=start则mid必定属于第一部分,因为第二本分的数都小于start,反之mid属于第二
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值