分治算法之二分搜索
1、問題
一天晚上,我們在家里看電視,某大型娛樂節目在玩猜數游戲。主持人在女嘉賓的手心上寫一個 10 以內的整數,讓女嘉賓的老公猜是多少,而女嘉賓只能提示大了,還是小了,并且只有 3 次機會。主持人悄悄地在美女手心寫了一個 8。老公:“2。”老婆:“小了。”老公:“3。”老婆:“小了。”老公:“10。”老婆:“暈了!”孩子說:“天啊,怎么還有這么笨的人。”那么,聰明的孩子,現在隨機寫 1~n 范圍內的整數,你有沒有辦法以最快的速度猜出來呢?
2、分析
我們用二分法,把數據拍好序,然后折半查找,縮小范圍,比如一組數據
1,4,5,8,10
需要查找的數據是8
查找過程如下
第一次找中間5,然后分割數據
5,8,10
然后第二次找8,找到了
3、代碼實現
#include <iostream>
#include <algorithm>using namespace std;#define MAX 100int data[MAX];int binarySearch(int *data, int length, int value)
{//折半思想,如果high = lenght; (low + lenght) / 2是中間的后面一個元素//所以需要high = length - 1;
總結
- 上一篇: 贪心算法之用优先队列(priority_
- 下一篇: 分治算法之合并排序