二分法查詢使用的前提是一串資料必須是有序的(遞增或遞減),時間複雜度是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...