1. 程式人生 > >查詢旋轉陣列的最小值-- 二分查詢

查詢旋轉陣列的最小值-- 二分查詢

假定一個排序陣列以某個未知元素為支點做了旋轉,如:原陣列0 1 2 4 5 6 7旋轉後得到 45 6 7 0 1 2。請找出旋轉後陣列的最小值。假定陣列中沒有重複數字

旋轉之後的陣列實際上可以劃分成兩個有序的子陣列:前面子陣列的大小都大於後面子陣列中的元素

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]的關係,能夠得到相似的結論。