旋轉陣列的二分查詢

2021-06-22 16:27:49 字數 1082 閱讀 7939

1、什麼是旋轉陣列

旋轉陣列是將乙個有序陣列的前若干個數旋轉到陣列末尾,例如陣列a[5]=   那麼陣列b[5]=為陣列a的乙個旋轉陣列

2、旋轉陣列的二分查詢之找到給定key

對於給定乙個數key,如何從旋轉陣列中找到key的位置呢?由於旋轉陣列部分有序,故可以利用二分查詢思想來設計演算法,從而達到logn的時間複雜度。

**如下:

public int rotatearraysearch(int a, int key)  else 

} else else

}} return -1;

}

3、旋轉陣列的二分查詢之找出最小值

找出旋轉陣列中最小值。演算法大概思路:首先利用兩個索引low,high指向陣列a[ ]首尾元素,然後二分求mid,判斷a[mid],若a[mid]>=a[low],則說明最小元素在右側,那麼令low=min;若a[mid]另外要考慮有乙個特例,就是當a[low==a[high]&&a[low]==a[mid]時,在這種情況下就只能遍歷陣列找出元素。原因如下:

**如下:

public int rotatearraymin(int a)

int low=0,high=a.length-1;

int mid=low;

while(a[low]>=a[high])

mid=low+((high-low)>>1);

if(a[low]==a[high]&&a[low]==a[mid])

if(a[mid]>=a[low])else

} return a[mid];

}private int getminbyorder(int a) {

// todo auto-generated method stub

int min=a[0];

int len=a.length;

for(int i=1;i

後記:積跬步,致千里

旋轉陣列的二分查詢

1.問題描述 已知有序陣列a n 從中間某個位置k k未知,k 1表示整個陣列有序 分開,然後將前後兩部分互換,得到新的陣列,在該新陣列的查詢元素x。如 a 從k 4分開,得到新陣列a 一次二分查詢 二分查詢演算法有兩個關鍵點 1 陣列有序 2 根據當前區間的中間元素與x的大小關係,確定下次二分查詢...

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...