二分法的變種

2021-07-31 12:51:02 字數 1080 閱讀 4523

二分法查詢使用的前提是一串資料必須是有序的(遞增或遞減),時間複雜度是o(lgn),查詢速度特別快;

但是對於這樣一串資料4 5 6 1 2 3,前一部分是遞增,後一部分也是遞增,這樣一串資料怎麼去使用二分法查詢呢?

把乙個陣列最開始的若干個元素搬到陣列的末尾,稱之為陣列的旋轉。上面的 4 5 6 1 2 3就是陣列 1 2 3 4 5 6的乙個旋轉。看看這樣一道題:輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

測試用例:

功能測試(陣列中有重複數字或者沒有重複數字)

邊界值測試(輸入陣列是乙個公升序排序的陣列,只包含乙個數字的陣列)

特殊輸入測試(輸入null指標)

分析:陣列為空;

只有乙個數字的陣列;

正常陣列(旋轉前遞增,無重複,數字個數大於乙個);

有重複數字的陣列;

一定要考慮陣列中有相同數字的特例;4 5 6 1 2 3, 1 1 1 0 1 1。

開始解題:

我們先處理正常情況下的

處理有重複數字的:

0 1 1 1 1 1旋轉之後的結果1 1 1 0 1 1

對於這樣的我們無法知道mid是位於第乙個區間還是第二個區間,只能去乙個個遍歷查詢最小值;

int minorder(int arr, int start, int end)    //順序查詢最小值,處理有重複數字的情況

start++;

} return result;

}int minbinary(int arr, int length)

int start = 0;

int end = length - 1;

int mid = 0;

if (length == 1) //只有乙個元素

while ((start + 1) != end)

else if (arr[mid] <= arr[end])

}return arr[end];

}

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法 折半查詢 以及其變種

public static void main string args int endequalbyhzz findendlessequalbyhzz arr2,11 system.out.println endequalbyhzz 找到第乙個匹配的值 static int findfirstequ...