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