>> ZAMYLA陈：首先，你可能会 通知有关的发现是，我们已经
已编写的代码我们。
这就是所谓的分配的代码。
所以，我们不只是编写我们自己的 从头开始编写代码了。
相反，我们正在填补空隙 在某些预先存在的代码。
>> 该find.c程序会提示输入数字 填补了草垛，搜索
在haystack一个用户提交的针， 它是通过调用排序和
定义的搜索，函数 在helpers.c。
所以find.c已经写入。
你的任务是写佣工。
>> 所以我们在做什么？
我们正在实施两种功能。
搜索，返回true，如果一个值 在草垛被发现，返回
假如果该值 不是在干草堆。
然后我们也实施排序， 这所谓的排序值数组。
因此，让我们来解决搜索。
>> 搜索目前已实施 作为一个线性搜索。
但是你可以做的比这更好的。
线性搜索是在n个邻实施 时间，这是相当缓慢的，尽管它
可以搜索给它的任何列表。
你的任务是实现二分查找， 已运行日志的n时间为O。
这是相当快的。
>> 但是有一个规定。
二进制搜索只能搜索 通过预排序的列表。
这是为什么？
那么，让我们来看一个例子。
给定的值的数组，草垛， 我们要去寻找
一针，在这 例如，整数3。
>> 二进制搜索的工作方式是， 我们比较的中间值
阵列到针，很像如何 我们开了一个电话簿中间
在周0页。
所以中间值相比较之后 针，你可以放弃任
左或阵列的右半 收紧你的界限。
在这种情况下，由于3，我们的针，是 小于10时，中间值，该
右边界会降低。
>> 但尽量让你的界限 尽可能紧。
如果中间值不是针 那么你知道，你并不需要
它包含在你的搜索。
所以，你的权利绑定可以收紧 搜索范围更多的只是一点点，
等等等等，直到 你发现你的针。
>> 那么什么是伪 代码是什么样子？
好了，而我们仍然在寻找通过 列表中，仍然有
元素在看，我们取中间 列表和比较
中间的价值，我们的针。
如果他们是平等的，那么这意味着我们已经 发现针，大家可以
返回true。
>> 否则，如果针小于 的中间值，那么这意味着我们
可以丢弃的右半边，只是 搜索数组的左侧。
否则，我们将搜索 右侧的数组。
并在结束时，如果你没有任何 留下来搜索更多的元素，但你
有没有发现你的针还， 那么你返回false。
因为针绝对 是不是在干草堆。
>> 现在，人们整齐一点关于这个伪 在二分搜索代码是，它可以
被解释为一个迭代 或递归实现。
因此，这将是递归的，如果你叫 在搜索中的搜索功能
功能上无论是数组的一半。
我们将介绍递归位 在后面的过程。
但是知道它是一个选项 如果你想尝试。