1.問題描述
已知有序陣列a[n],從中間某個位置k(k未知,k=-1表示整個陣列有序)分開,然後將前後兩部分互換,得到新的陣列,在該新陣列的查詢元素x。如:a=,從k=4分開,得到新陣列a=。
《一次二分查詢》:二分查詢演算法有兩個關鍵點:1)陣列有序;2)根據當前區間的中間元素與x的大小關係,確定下次二分查詢在前半段區間還是後半段區間進行。
仔細分析該問題,可以發現,每次根據low和high求出mid後,mid左邊([low, mid])和右邊([mid, high])至少乙個是有序的。
a[mid]分別與a[low]和a[high]比較,確定哪一段是有序的。
如果左邊是有序的,若xa[low],則high = mid-1;其他情況,low = mid+1;
如果右邊是有序的,若x>a[mid]且x
**:
public class findxinrotatearray else
} return -1;
}}
旋轉陣列的二分查詢
1 什麼是旋轉陣列 旋轉陣列是將乙個有序陣列的前若干個數旋轉到陣列末尾,例如陣列a 5 那麼陣列b 5 為陣列a的乙個旋轉陣列 2 旋轉陣列的二分查詢之找到給定key 對於給定乙個數key,如何從旋轉陣列中找到key的位置呢?由於旋轉陣列部分有序,故可以利用二分查詢思想來設計演算法,從而達到logn...
C 實現旋轉陣列的二分查詢
題目要求 旋轉陣列,如是的乙個旋轉,要求利用二分查詢查詢裡面的數。這是一道很有意思的題目,容易考慮不周全。這裡給出如下解決方法 include using namespace std int sequentialsearch int array,int size,int destvalue retu...
二分搜尋 旋轉陣列
以二分搜尋為基本思路 簡要來說 nums 0 nums mid 0 mid不包含旋轉 且nums 0 target nums mid 時 high 向前規約 nums mid nums 0 0 mid包含旋轉 target nums mid nums 0 時向前規約 target 在旋轉位置到 mi...