查詢旋轉陣列的最小值-- 二分查詢
阿新 • • 發佈:2019-02-03
假定一個排序陣列以某個未知元素為支點做了旋轉,如:原陣列0 1 2 4 5 6 7旋轉後得到 45 6 7 0 1 2。請找出旋轉後陣列的最小值。假定陣列中沒有重複數字
o 旋轉之後的陣列實際上可以劃分成兩個有序的子陣列:前面子陣列的大小都大於後面子陣列中的元素
n 4 5 6 7 0 1 2
n 注意到實際上最小的元素就是兩個子陣列的分界線。
思路: 4 5 6 7 0 1 2
o 用兩個指標low,high分別指向陣列的第一個元素和最後一個元素。如果是正常的排序陣列(元素間不重複),第一個元素肯定小於最後一個元素。
o 計算中間位置mid= (low+high)/2;
n 若:A[mid]>A[low],則A[low,low+1….mid-1,mid]是遞增序列,最小元素位於子陣列A[mid+1,mid+2,…high]中。因此,做賦值low=mid+1;
n 若:A[mid]<A[low],則A[low,low+1….mid-1,mid]不是遞增序列,即:中間元素該子陣列中,做賦值high=mid。
n 注:對偶地,若考察A[mid]與A[high]的關係,能夠得到相似的結論。