[4,5,6,7,8,0,1,2,3]中查找x,有则返回x索引,没有则返回-1
思路:
1.二分查找,mid=start+(end-start)/2;
2.mid的左边和右边必有一边是有序,若arr[mid]>arr[start],则左边有序,若arr[mid]<arr[start],则右边有序;
3.若左边有序,则以mid为分割,左边的范围为:[arr[start],arr[mid]),右边的范围为(arr[mid],+∞)U(-∞,arr[start]),所以可以判断x属于左边还是右边
def func(arr,x):
if len(arr)==0:
return -1
start=0
end=len(arr)-1
while(start < end):
mid=start+(end-start)/2
if x==arr[mid]:
return mid
if x==arr[start]:
return start
if x==arr[end]:
return end
if arr[mid]>arr[start]:
if x>arr[start] and x<arr[mid]:
end = mid - 1
else:
start = mid + 1
else:
if x>arr[mid] and x<arr[end]:
start = mid+1
else:
end=mid-1
if(arr[start]==x):
return start
return -1