將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。首先來初步認識一下二分法:
遞迴以及非遞迴方法
如果查詢陣列裡面的某個數
首先確保陣列是有序的
順序(以公升序陣列為例)
1.確定陣列的頭尾,用標識記錄(high,low)
從中間元素(mid)搜尋是就返回
2.不是中間數就看要找的數比中間數大還是小
大(小)的話就在中間數的右(左)半部分找
high=mid+
1(low=mid-
1)重複1操作
3.直到找到數或者high>low結束
非遞迴查詢
#include
#include
//非遞迴演算法
intbin_search
(int
*arr,
int length,
int find)
else
if(arr[mid]
< find)
//尋找數在後面
else
//判斷是否相等
}printf
("查詢次數:%d\n"
,sum)
;return-1
;}
遞迴查詢
//遞迴演算法
intbin_search
(int
*arr,
int find,
int high,
int low)
if(arr[mid]
< find)
else
return mid;
}return-1
;}
主函式
void
main
(void);
printf
("1是遞迴,2是非遞迴:\n");
scanf
("%d"
,&a)
;switch
(a)else
break
;case2:
printf
("非遞迴,請輸入您要查詢的數字:\n");
scanf
("%d"
,&find)
;int site =
bin_search
(arr,
10,find);if
(site!=-1
)else
printf
("無該數字!!\n");
}}
找最大、小金塊 —— 二分法原陣列可以是無序,只需要遞迴分解問題直到分解到陣列只有乙個或兩個元素,這樣就形成了有序的陣列,通過指標返回最大最小值。
int
main()
;int max=
0,min=
99,i=
0,j=8;
//i是頭 j是尾
maxmin
(i,j,
&max,
&min,a)
;printf
("max=%d ,min=%d"
,max,min);}
void
maxmin
(int i,
int j,
int*max,
int*min,
int*a)
else
if(j==i+1)
else
}else
}
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 ...
二分法查詢
前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...