二分法查找有序循環數組
有序循環數組類似[7, 8, 9, 0, 1, 2, 3, 4, 5, 6],即一個有序數組被分割成兩部分,兩個子數組都是有序的
采用二分法查找指定值的時候,需要判斷一下兩個情況:
1.首地址到mid地址有序,即array[0] <= array[mid],此時判斷目標值target是否在[0, mid]區間
2. 首地址到mid地址前部分有序,即array[0] >= array[mid],此時判斷目標值是否在[mid, end]區間
下面看具體代碼分析,使用go語言
func search(s []int, target int) int {
low := 0
high := len(s) - 1
for low <= high {
//找到中間元素
mid := low + ((high - low) >> 1)
//如果s[0] < s[mid],即左邊數組有序
if s[0] <= s[mid] {
//target在左邊有序數組, 相當於mid落在7-9之間
if s[0] <= target && target <= s[mid] {
high = mid - 1
} else {
low = mid + 1
}
} else {//s[0] > s[mid]
//mid落在右邊有序數組,相當於在[0,6]之間
if target >= s[mid] && target <= s[high] {
low = mid + 1
} else {
high = mid - 1
}
}
}
return -1
}
二分法查找有序循環數組