>> ZAMYLA陳：首先，你可能會 通知有關的發現是，我們已經
已編寫的代碼我們。
這就是所謂的分配的代碼。
所以，我們不只是編寫我們自己的 從頭開始編寫代碼了。
相反，我們正在填補空隙 在某些預先存在的代碼。
>> 該find.c程序會提示輸入數字 填補了草垛，搜索
在haystack一個用戶提交的針， 它是通過調用排序和
定義的搜索，函數 在helpers.c。
所以find.c已經寫入。
你的任務是寫傭工。
>> 所以我們在做什麼？
我們正在實施兩種功能。
搜索，返回true，如果一個值 在草垛被發現，返回
假如果該值 不是在幹草堆。
然後我們也實施排序， 這所謂的排序值數組。
因此，讓我們來解決搜索。
>> 搜索目前已實施 作為一個線性搜索。
但是你可以做的比這更好的。
線性搜索是在n個鄰實施 時間，這是相當緩慢的，儘管它
可以搜索給它的任何列表。
你的任務是實現二分查找， 已運行日誌的n時間為O。
這是相當快的。
>> 但是有一個規定。
二進制搜索只能搜索 通過預排序的列表。
這是為什麼？
那麼，讓我們來看一個例子。
給定的值的數組，草垛， 我們要去尋找
一針，在這 例如，整數3。
>> 二進制搜索的工作方式是， 我們比較的中間值
陣列到針，很像如何 我們開了一個電話簿中間
在週0頁。
所以中間值相比較之後 針，你可以放棄任
左或陣列的右半 收緊你的界限。
在這種情況下，由於3，我們的針，是 小於10時，中間值，該
右邊界會降低。
>> 但盡量讓你的界限 盡可能緊。
如果中間值不是針 那麼你知道，你並不需要
它包含在你的搜索。
所以，你的權利綁定可以收緊 搜索範圍更多的只是一點點，
等等等等，直到 你發現你的針。
>> 那麼什麼是偽 代碼是什麼樣子？
好了，而我們仍然在尋找通過 列表中，仍然有
元素在看，我們取中間 列表和比較
中間的價值，我們的針。
如果他們是平等的，那麼這意味著我們已經 發現針，大家可以
返回true。
>> 否則，如果針小於 的中間值，那麼這意味著我們
可以丟棄的右半邊，只是 搜索數組的左側。
否則，我們將搜索 右側的數組。
並在結束時，如果你沒有任何 留下來搜索更多的元素，但你
有沒有發現你的針還， 那麼你返回false。
因為針絕對 是不是在幹草堆。
>> 現在，人們整齊一點關於這個偽 在二分搜索代碼是，它可以
被解釋為一個迭代 或遞歸實現。
因此，這將是遞歸的，如果你叫 在搜索中的搜索功能
功能上無論是數組的一半。
我們將介紹遞歸位 在後面的過程。
但是知道它是一個選項 如果你想嘗試。