金塊(最大 最小金塊)二分法查詢

2021-10-04 16:54:01 字數 1943 閱讀 2342

將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。

首先來初步認識一下二分法:

遞迴以及非遞迴方法

如果查詢陣列裡面的某個數

首先確保陣列是有序的

順序(以公升序陣列為例)

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 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...