>> JASON HIRSCHHORN：欢迎 三个星期，大家好。
我们有一个忙碌的，但令人兴奋的 摆在我们面前的一节。
因此，首先，因为我们已经做了一些 进展的过程，但我们仍然
有一个很大的学问剩下要做的，我 要告诉你们一些资源
这应该被证明是令人难以置信 有用你不仅接近你
习题集，而且还消化所有的 我们给你们的材料
讲座和短裤和一节。
>> 然后，我们将先花20 节会超过25分钟
GDB，您可能会或可能不会有 用在这点上，但它是一个
令人难以置信的有用工具，将 帮助你调试你的程序。
很多您在可能使用的printf 你的程序的中间图
哪些变量望其项背。
GDB甚至比printf的更好， 不搞砸了你的代码，因为你
对可执行文件运行它。
所以我们就去了10个最有帮助 命令你需要GDB，我们很
要继续练习在一起， 在问题设定了三个超越，你
可以用GDB来帮助调试 您的程序。
最后，我们将介绍一些 排序和查找算法
您在演讲看见了，我们是 将实际的代码，而不只是
伪代码，但代码的二进制搜索， 冒泡排序和选择排序。
>> 因此，首先，我想去 以上的资源。
这是一个广泛的名单，它的 较小的字体，因为我有很多东西要
适合在这里。
但这些不仅会帮助你， 再次，与习题集和
你学到了消化信息，但 肯定，来测验时间，这些都会
说非常有用。
因此，首先，演讲笔记。
如果你去cs50.net/lectures和 滚动到特定的星期和日，
你会看到，有注释为每个 讲课，这不是一个简单的
成绩单，而是一个编辑的版本 什么是覆盖在讲座与代码
片段和其他有用的花絮。
我强烈建议你对这些。
然后还有，还有源代码 可从每个讲座。
再次，这些幻灯片也将是 可在网上cs50.net/sections
今天晚上。
>> 因此，每个星期第二是短裤的 封面专题，一般为5〜15
分的长度。
而那些希望会给你一个 伟大的底漆上不同的主题。
第三 -
这是全新的这 年 - 是study.cs50.net。
如果你还没有检查出来，我 强烈建议您这样做。
你来挑一个话题。
我们对有几十个主题。
因此，例如，你选择的功能。
它给你一些幻灯片 并注意到功能。
这些都是实际的幻灯片，转录因子 鼓励在使用我们的
演示一节。
还有处理的技巧和窍门 与功能，并有
实践中的问题，帮助 您使用的功能。
我们也给你链接到的短 函数和时间，其功能
已经提出了在课堂上。
所以study.cs50.net，全新的这种 今年，一个奇妙的资源。
>> 接下来，我有男人，也就是手动 命令，你可以在运行
命令行。
所以，如果您对任何问题 命令，例如，兰特，这是我们
部分在上周遭遇 而你在已可能遇到
通过去当你的设置的问题 生成的代码，但如果你输入man
兰特，你会得到的页面 告诉你所有关于兰特。
它给你什么需要时， 它需要的参数，以及返回
类型和简要说明 那功能。
>> 因此，请检查兰特。
它可以是一个有点罗嗦和混乱， 所以有时我觉得
简单的谷歌搜索什么我想知道的是 找到答案的最佳途径。
因此，与谷歌的做法。
获得良好的谷歌。
它会成为你最好的朋友。
>> 以及谷歌，如果你不能找到它 在谷歌，cs50.net/discuss，它的
讨论论坛。
机会是，如果你有一个问题，一是 你的700 +的同龄人也有
问题可能问 它已经在讨论
论坛上，并让它回答。
所以，如果你有一个共同的问题或 您有想一个问题
也许其他人可能碰上， 退房cs50.net/discuss。
>> 最后，最后两个，如果你想要 跟一个真正的人，办公室
时间周一至周五。
还有网上办公时间 延期的学生。
最后但并非最不重要的， 我的惊叹号。
你们都有我的联系方式。
如果你需要什么，请千万不要 随时与我联系。
总觉得自由地这样做。
只有极少数的你加了我的Gchat， 让一直令人失望，
但我希望那会改变之间 这一点，下一节。
到目前为止，对资源的任何问题吗？
大。
>> 最后，另一个插头 反馈，sayat.me/cs50。
你可以给我匿名反馈 关于我是如何做。
那是真正有用的最后一周。
我有一对夫妇的评论从你们 右后部分，再加上从
谁看了其他学生 在一周内，并且它
是难以置信的帮助。
我要尝试限制我使用 单词“甜”，但我会告诉我的
热情和兴奋 在其他方面。
但也有其他附加 实质性的反馈，
双方的长处和三角洲。
所以，请我给你们反馈 关于您的问题集。
随时给我反馈 在我的教学。
我在这里给你们。
>> 大。
这就是我对 首节。
没有任何人有任何 问题这么远吗？
和我有记 控制中心。
扩展学生短信给我 说他们没有得到任何音讯，
但是这是我的力量来解决的。
所以希望，即得到 短期内得到解决。
如果你正在看在线，喜， 但你听不到我的声音。
>> 因此，首先，我们要 要经过GDB。
GDB，因为我暗示较早， 是一个调试工具
比printf的要好得多。
因此开始使用GDB，你们这些家伙，如果 你要打开你的设备
走，我通过电子邮件发送给您的文件 前面 - 这个文件也将是
可在网上在一个位 -
和运行GDB /文件的名称。
首先，当然，你必须编译 文件因为GDB只适用于
可执行文件。
>> 但是，如果你想开始 GDB，你要做的第一件事，
你运行GDB /凯撒。
所以这是我们的程序的名称 去，现在用它去。
所以我打算写使凯撒，这 会给我一个可执行文件
在这里绿色突出。
然后我要去运行GDB /塞萨尔。
>> 和你去。
你看我们有一些文字告诉我 关于广发行的版本，给我
一些保修信息，然后我们 有国内生产总值提示，这看起来有点
像我们的命令行提示符下， 但是你看它的开放
括号，GDB，密切括号。
在我们继续之前和调试这个文件 那我给你的一切，让我们来看看
一些有用的命令，所以我们有一种感觉， 什么我们要覆盖。
>> 这些命令列在这里的 顺序我一般使用它们。
所以我通过运行启动我的程序 该方案的GBD。/名称，
在这种情况下，恺撒。
然后我首先要做99.9％ 的时间类型休息的意思。
，在主设置一个断点。
从本质上讲，你在做什么有 是该程序将停止在
主这样你就可以开始研究它线 按行，而不是运行的所有
一路走过。
可以在不同的点在破 你的代码，但主要是一个普遍
良好的开端。
>> 下一个命令我跑是跑。
启动该程序运行，并 如果你需要输入的命令行
的论点，你运行它的命令。
与参数运行。
这样以来，我们去那边的一个版本 C，这是该计划你们的
写了PSET 2 -
这其中，当然，有一些错误 在它那希望我们会发现 -
我们将用一些命令来运行运行 行参数，因为恺撒，
按问题你们知道 设置规范，需要一些
命令行参数。
>> 在接下来的几个命令，下一个 一个是实际调用下一个。
那一个你需要一行一行 通过你们的节目。
所以打n，则输入带你 行到下一行，执行
上一行。
步骤不仅需要你 下一行，但它
你需要在函数内部。
所以，如果你写一个函数 你的代码或者如果您想探索
以我为例，你可以打s和 而不是去的下一行
你正在经历右边的文件 现在，你将真正步入
这个函数然后看看它的代码。
>> 列表显示，在非常人性化 格式，10行左右左右
您当前所在的代码 所以实际上你可以看到文件
而不必交换背部和 来回之间不同的看法。
打印是如printf， 顾名思义。
这表明你是什么一个变量等于。
>> 信息本地人是真正有用的。
这是印刷的特殊版本。
信息当地人告诉你所有的地方的 变量，它们打印全力为您
目前可用。
所以我一般，而不必 打印出来的四个变量，我很
好奇，如果我在一个for循环中，为 举例来说，我只是写信息本地人，
它会告诉我什么我的计数器i 等于，以及我是阵列
工作平等。
>> 最后，继续。
键入中断停止你 在破发点。
你可以通过走线 旁边和步线。
继续运行程序到下一个 突破点，或直至完成，如果
有没有更多的破发点。
禁用删除断点，如果你 决定在主要的突破是
不当之处，你要 设置在别的地方。
最后Q，退出，得到了广发行。
>> 所以这个程序，/撒，我们将 仔细看看，现在，我们
要使用GDB找 臭虫此计划。
我跑这个程序与前面 检查50，我得到了一个皱眉。
一切它的存在，它编译的，它 通过大量的试验，但对于
由于某些原因，它没有通过第五 测试中，转向BARFOO，全部大写，成
E-D-U-R-R，全部大写， 使用3作为密钥。
我得到了八九不离十。
我由一个字母下车。
因此，有一些小的失误在这里。
我已经通过我的代码看起来。
我无法弄清楚。
希望你们能帮助我 找出这个bug是。
>> 所以这是我们的错误 寻找。
让我们继续前进到GDB。
再次，我已经运行GDB /凯撒， 所以现在我们在广发行。
什么是第一 我应该做的事情吗？
我刚刚进入GDB。
有人给我一个很好的 命令进入。
>> 学生：休息为主。
>> JASON HIRSCHHORN：休息为主。
太棒了。
让我们键入英寸
你们可以在这里观看或跟随 沿着你的电脑上。
打破主，你会看到一个 断点设定在 -
它给了我一些奇怪的内存地址， 而这也给我的行号。
如果我回头看这个文件， 我想知道，主
发生在第21行。
我应该怎么跑下一个？
是我的程序运行？
号
所以，我应该怎么跑下一个？
>> 学生：运行。
>> JASON HIRSCHHORN：运行。
如果我只是跑跑步，还是应该 我在添加一些其他的东西？
>> 学生：使用参数运行。
>> JASON HIRSCHHORN：与运行 命令参数。
而且因为我调试一个非常具体的 情况下，我应该输入
命令行参数。
所以我会做运行三个，这是，再次， 我从50检查了输出。
启动程序。
我们通过几行。
现在你会看到，我们是在第21行。
我怎么知道，我们是在第21行？
因为如果你向左边看 我的终端窗口中，有
它说21行。
这给了我，其实， 代码是在第21行。
所以我刚才讲错。
主要是不实际在第21行。
主要是上述21几行。
但在第21行，这是 我们正在打破。
这行代码有 尚未执行。
这一点很重要。
你看行不有 尚未执行。
这就是下一行代码 你即将执行。
>> 所以下一行，因为你们是 可能熟悉，这是
状态检查，看看我是否有 输入的命令行参数。
和A至I，什么是第二 这样做的一部分？
什么是对我？
>> 学生：它更改为一个整数。
>> JASON HIRSCHHORN：对不起？
>> 学生：它改变了 参数的整数。
>> JASON HIRSCHHORN：所以一到我的变化ARG 卷从一个字符串为整数。
然后它是什么检查？
>> 学生：如果有一个第二 命令行参数，除了
运行该程序。
>> JASON HIRSCHHORN：什么是 在此第二半
布尔表达式检查？
这部分在这里，一来我？
>> 学生：如果是负数。
>> JASON HIRSCHHORN：确保什么？
>> 学生：确保它 是，实际上正。
>> JASON HIRSCHHORN：没错。
这被检查，看它是否 负的，而如果它是负的，我
有一种感觉，下一行可能 被我骂的用户。
因此，让我们打结束时执行这条线。
我们没有看到该行的你们 也许期望看到大喊大叫的
用户再回来，因为 这一行没有执行。
我进入3。
所以，我没有，事实上，输入两个命令 行参数，和3
大于零。
所以，我们看到那行，我们执行， 但我们没踩
里面的if条件。
>> 所以，现在，未来，我看到我设置 整型键等于给我精氨酸卷。
所以这是我创建一个可变密钥。
所以，如果我打印出来的关键，现在，因为 这可以让你看到的
值里面的变量， 关键等于47。
这是奇怪的，但当然， 那是因为我没有
执行该行呢。
所以，现在如果我打了N，执行该行， 并做打印键，键将等于3，
这是我们期望它等于。
>> 如此反复，在广发行，行啦 看你有没有执行。
你必须打N或S或数字 其他命令来实际的
执行该行。
打印键。
关键的第3。
到目前为止，一切都很好。
String是纯文本。
让我们来执行该行。
我是从用户得到的字符串。
>> 让我们在我入住50看，我 进入BARFOO全部大写，所以
这就是我进入。
如果我现在打印纯文本。
你会看到它等于一个字符串。
它给了我一些其他怪异的十六进制 数，但它在
其实说我的字符串是BARFOO。
如果我想看看什么键相当于在 这点，我怎么可以检查关键？
>> 学生：打印键。
>> JASON HIRSCHHORN：Print键，没错。
而实际上，有一个快捷方式。
如果你厌倦了打字印刷的， 你可以只输入p。
所以，p键做同样的事情。
又一次，我看到它等于3。
>> 如果我想找出什么两大关键 和BARFOO相当于在同一时间
但我累了打字每 一出单独，我
可以输入信息本地人。
这给了我钥匙等于3。
纯文本等于BARFOO。
这也给了我这两个奇怪的事情 在顶部，该变量i和
这个变量n。
>> 这些都是实际存在的 在我的主程序。
我们还没有遇到过他们呢， 但作为预览，那些
存在于我的for循环。
所以现在，他们平等有些怪异 数字，因为他们没有被
初始化还没有，但它们仍然存在 在内存中，所以他们只是设置
一些垃圾值。
但是我们看到在关键平原 文字在那里。
>> 所以，我要执行这条线， 第34行，for循环。
我们要跳进 for循环击中ñ。
而且我们内部的for循环。
我们是在我们的第一次检查。
再次，这些都应该有点期待 你熟悉的，因为这是一个
写凯撒程序，但 再次，有一些类型的错误。
>> 现在如果我做信息本地人，因为我 里面的那个for循环，你会看到
我等于零，正如我们期望的那样。
这就是我们将其设置为和初始化 它在for循环。
n等于6。
这也有道理，因为我们设置 它以纯文本的strlen的。
所以我喜欢做信息本地人或打印 到变量经常以确保
一切总是什么 我希望它等于。
在这种情况下，一切都 我希望它等于。
>> 因此，让我们开始通过移动 这个for循环。
我上线是36行，如果纯 文字i大于一个朴素
文本i小于或等于z。
我知道我的问题是不是与我的第一次 信中，它与第二个字母。
如果我们回头看检查 50，B进入到E的罚款。
我要带A和把它当作 一个A，而不是将其更改为D。所以，
什么是错的 第二个字母。
所以，我要动 在第二那里。
>> 但是，如果我没有想检查什么纯 文字我等于在这个特殊的
情况下，我觉得应该是什么？
我应该明文等于我在这 通过第一轮的循环？
>> 学生：零？
>> JASON HIRSCHHORN：我纯文本？
所以它应该是资本B的我，当然， 为零，但纯文本
支架零闭合支架等于乙 因为字符串，如我们上周看到的，
是数组，所以我们得到的 第一个字符从。
所以，再一次，如果我打印出来的纯文本 我，我，其实得到的字符
B.这就是整齐的，对不对？
我实际上并没有明文一 这不是我设置的变量之一
或初始化，但你可以打印 出了事情一大堆
如果你想。
>> 但是，让我们移动。
如果纯文本我是和大于 明文I小于或等于
Z，这显然是正确的，因为我们有 资本B.我要去跑
它的一些命令。
我们看到，数学最后一周，所以我们将 想当然，它的工作原理
根据权利检查50。
>> 这些大括号，第一个 结果显示，我是退出，如果
条件，第二个显示 那我退出for循环。
所以现在当我打接下来，我们将看到 我们回来在for循环一次。
我们正在经历的 再次循环。
让我们真正步入第二 迭代的for循环和类型
信息本地人。
>> 所以我们在第二次迭代 我们的for循环。
我等于1，这是我们期望的。
N等于6，而我们预期。
关键等于3，这是我们期望的。
和纯文本，你会看到，等于 EARFOO现在，没有BARFOO了，因为
在我们先前的迭代中，B为 改为大写E。所以我们即将
遇到的问题，所以这 在这里我们要
潜入调试。
但是，没有任何人有任何问题 关于我们到目前为止已经做了什么？
太棒了。
>> 所以我们一下，如果执行此 条件下，纯文本支架我关闭
比A和支架更大的纯文本我 小于或等于Z。但在此之前
我进入了，因为这是 我知道我的错误，我想点
出一的纯文本，以便 让我们把打印出来。
它等于字符A，使 似乎到目前为止，一切都很好，不错。
>> 所以我希望我的每逻辑这条线， 这条线应该是真实的。
这是一个大写字母。
但如果我打了N，我们要明白，这个 行，其实并没有执行。
我跳进来的东西，如果。
为什么会这样？
>> 学生：因为你有你的条件 纯文本的大
比A，不等于或大于。
>> JASON HIRSCHHORN：所以我有我的纯文本 我大于A，不大于
小于或等于。
所以很明显，资本A没有 如果条件触发这一点，我们做
没有踏进去，和我们做 没有做必要的转变。
所以这是它，其实。
我想通了，我的错误。
我可以回去在我的源文件， 改变它，更新它，
运行再次检查50。
>> 但我们会看到，只是为了教学的 的缘故，如果我坚持去做。
本否则，如果不执行下去，但 什么，而不是等于就是命令
不改变。
所以它没有改变，如果我 这里打印纯文本，我们会看到去
通过for循环没有，事实上， 改变第二个字符的。
它仍然是一个大写字母A。
>> 所以，再一次，我们调试我们的错误。
我们意识到有 一些逻辑缺失。
和我们之前调试它的时间提前 实际执行这条线，
但你会注意到有我们只是 点击Next，并跳转到否则，如果，
这意味着，如果条件 是不正确的。
我们没有，事实上，获得 结果我们的预期。
这样的话，我们可能已经提示，有 我们没有这么精明，看
如果条件和检查的话，其实， 我们的条件应计算为
真正在目前情况下。
>> 这是所有用于调试这个程序。
没有任何人有任何问题吗？
我可以打什么命令退出GDB？
问：然后我就被提示， 退出呢？
是或否。
我会打，是的，我会相继退出GDB。
>> 所以这是一个快速入门到GDB。
实际上，在实际情况下， 我这样做是在办公时间。
我GDBed在这个确切的程序 办公时间与学生。
如果我们回去，我们看到的命令 之前，我们使用了破发主力，第一
的事情，我们做到了。
我们使用命令行参数运行， 第二件事情，我们做到了。
接下来，我们用了很多移动 我们通过线。
再次，短版 旁为n。
这是在括号 在灰色的幻灯片。
>> 我们没有使用的步骤，但是我们并没有 一定需要这种情况。
但是，我们可能会在稍后使用它 今天，如果我们正在调试，为
例如，二进制搜索二进制时 搜索被称为在一个单独的
的功能，但有 与它的一些错误。
我们将要步入 调用二进制搜索和
实际调试它。
列表中，我们没有使用或者是因为我们有 我们的代码感好，但如果我
没有想要得到的是什么代码，我感 在旁边，我可以只使用列表中。
>> 打印我们使用，我们使用信息的当地人。
继续我们并不需要在此使用 情况下，我们也没有需要使用
禁用的，但我们确实使用了退出。
同样，这些10的命令， 实践它们。
如果你了解这10个命令， 你应该调试任何设置
发用GDB。
>> 所以我们马上就要去上，再次向 部分的症结今天，去了
这些排序和搜索 算法。
在这样做之前，再次，有任何疑问， 意见，关注的广发行？
所以大家是要使用 GDB而不是printf的？
所以每个人都为永久的缘故， 大家都点头他们的头向右
现在，我会看到你在办公时间 和所有的转录因子会看到你和
他们会说，告诉我怎么用 GDB，你就可以
向他们展示，对不对？
样的？
也许有希望。
凉爽。
>> 所以，我们要进入 排序和搜索。
你会看到我已经排序的列表 对我们来说，但不会
是这种情况总是如此。
所以在问题设置规范 问题设定了三个，你有短裤
你可以看，它实际上 请你看看那些短裤。
此外，在演讲最后一周，我们走过去 很多这样的算法，所以我
不会花时间在课堂上会 一遍这些算法或图纸
图片，如何将这些 算法工作。
同样，这些信息您可以重新手表 讲座中，或者该信息
被捕获出色的短裤 对于这些搜索所有的，
这可在cs50.net。
>> 所以，我们要去什么 要做的就是编写这些程序。
我们有一个感觉，一个心智模式如何， 他们的工作，还等什么，我们要去
要做的就是对它们进行编码真实的。
我们打​​算把这一心智模式， 那张照片，如果你愿意，进
实际代码。
如果你是一个有点困惑或 朦胧的心智模式，我完全
明白了。
>> 我们不会实际去 跳转到代码通俗易懂。
因此，尽管这个提示在这张幻灯片问 你的代码的二进制搜索，并
实际上，一个迭代版本 二进制搜索，第一件事我
真的希望你做的是 写一些伪代码。
所以，你有这个心理模型 如何二进制搜索作品。
拿出一张纸，如果你有 1一应俱全，或者打开一个
文本编辑器，我想 大家都来写。
连拿4分写 伪代码二进制搜索。
>> 再次，想想心理模型。
我会回来的，如果你有任何问题 我们可以得出的图片出来。
但首先，我们开始编程之前， 我想要写
伪代码的二进制搜索，所以当我们 潜水，我们有一些方向
的地方，我们应该前往。
>> 学生：我们是否可以假设数组 我们得到的值已经排序？
>> JASON HIRSCHHORN：所以对于二进制搜索 工作 - 优秀的问题 - 你
必须采取以排序 数组值。
所以，假设它会奏效。
我们将回到这个幻灯片。
紫色的功能，你会看到 声明布尔整型binary_search的
值，int值，诠释n。
这应该看起来很熟悉，如果你已经 已经接近或得到你
手脏与习题集。
>> 但是，这是你的函数声明。
再次，应该不需要担心 这么多在这一刻。
我真的希望你做的是采取 四分钟的伪代码的二进制
搜索，然后我们就去 以上，作为一个组。
我会来到我身边。
如果您有任何疑问，请随时 自由地举起你的手。
>> 你为什么不走两分钟 完成了伪码？
我知道这可能看起来荒谬的， 我们花那么多时间
东西甚至不是真正的 C，但尤其是对于这些更
具有挑战性的算法和问题 集，我们要搞清楚，
开始在伪不担心 有关语法，只是担心
逻辑，是难以置信的帮助。
而这样一来，你不求解两个 令人难以置信的困难问题一次。
你只是专注于逻辑， 然后你进入的语法。
>> 确定。
让我们开始经历 伪代码。
我已经写在这里，二进制 搜索伪代码。
我们会写这篇文章的上 登上在一起。
或者我会写它，你会得到 我我需要的提示。
所以，有谁能够给我的第一个 伪代码的行，你
写了二进制搜索？
是的，安妮？
>> 学生：虽然的长度 列表是大于零。
>> JASON HIRSCHHORN：虽然长度 的商大于零。
又一次，我们看到一些C的前瞻性 在这里语法的东西。
但大部分是英文的。
有没有人有他们提出的任何行 在此之前他们的伪代码？
>> 学生：获得一个数组 的分类数字。
>> JASON HIRSCHHORN：你写了“得到一个 数组排序的数字。“每
函数的声明，我们将通过 排序的数字的阵列。
>> 学生：[听不清]。
>> JASON HIRSCHHORN：所以 我们将具有。
但是，是的，如果我们没有，我们 就需要我们对数组进行排序
数字，因为二进制搜索 仅适用于排序数组。
因此，尽管列表的长度为零，我 打算把一些大括号
使它看起来更有点像 C.但同时，似乎映射到
while循环，所以这里面，而 循环什么，我们需要
做二进制搜索？
>> 别人谁没有给我一个 但回答却是谁写的呢？
>> 学生：到列表的中间。
>> JASON HIRSCHHORN：汤姆。
转到列表的中间。
和后续的问题，什么 我们做一次，我们在
列表中的中间？
>> 学生：做一个检查这是否是 你要找的数量。
>> JASON HIRSCHHORN：优秀。
走在列表的中间，并检查 如果我们的价值在那里 -
太棒了。
没有任何人有任何东西 这是比这有什么不同？
这是完全正确的。
>> 我们在做二进制搜索的第一件事 被转到列表的中间，
检查，看看是否我们的价值是存在的。
所以我想，如果我们的价值 在那里，我们该怎么做？
>> 学生：我们回到零[听不清]。
>> JASON HIRSCHHORN：是啊，如果我们的 价值是存在的，我们发现它。
因此，我们可以不过告诉某种程度上，这 函数的定义，我们告诉用户
我们发现它。
如果它不存在，虽然，这是 这哪里得到棘手。
所以，如果它不存在，别人谁 正在对二进制搜索或
有一个想法，现在，我们该怎么做？
>> 学生：问题。
>> JASON HIRSCHHORN：怎么了？
>> 学生：是的数组已经排序？
>> JASON HIRSCHHORN：是的，我们假设 该数组已经排序。
>> 学生：所以，你必须检查 你看到的值大于
你想要的值，你可以移动 到另一半的中间。
>> JASON HIRSCHHORN：所以，如果中间 清单大于我们在做什么
寻找，然后我们做什么？
我们谨在哪里？
>> 学生：你想要移动到 列表中的与半
数字低于。
>> JASON HIRSCHHORN：所以我们会 调用的左侧。
因此，如果中间是更大的，我们可以搜索 列表的左边一半。
然后通过搜索什么 我的意思是搜索？
>> 学生：[听不清]。
>> JASON HIRSCHHORN：我们去中间。
事实上，我们重复这件事情。
我们回去通过我们的while循环。
我给你最后一个 -
否则，如果中间是少了什么 我们做什么，我们该怎么做吗？
>> 学生：你可以向右边。
>> JASON HIRSCHHORN：搜索的权利。
这看起来不错，但没有任何人有 任何事情，我们可能会丢失或
别的，你把 在你的伪代码？
所以，这就是我们有这么远。
而该列表的长度大 大于零，我们打算去
到列表中的中间和 检查我们的价值是存在的。
>> 如果中间大，我们要 搜索离开，否则，如果中间是
少，我们要搜索​​的权利。
所以，我们都不得不与一些熟悉 我们在计算机科学使用条款
和工具，我们有。
但你已经注意到我们 讲英文，但我们发现了一个
很多事情，似乎在映射到 我们已经在我们的编码工具包工具。
于是马上蝙蝠，我们不是 将实际的代码呢。
>> 我们看到了什么英文在这里，图 上的东西，我们可以用C写的？
>> 学生：虽然。
>> JASON HIRSCHHORN：虽然。
因此，这同时就在这里 地图上的是什么？
>> 学生：一个while循环。
>> JASON HIRSCHHORN：一个while循环？
或可能更一般地，一个循环。
我们想要做的事情一遍又一遍。
所以我们要编写一个循环。
而我们已经知道了，因为我们已经做了 这几次我们
有大量的例子摆在那里， 其实怎么写
该指数为一个循环。
所以这应该是相当容易的。
我们应该能够得到 启动很快。
>> 还有什么我们在这里看到了什么？
还有什么其他的结构语法，事情 我们熟悉C语言，我们做
已经有一个基于感 关闭我们所用的字眼？
是的，安娜？
[听不清]
只是在开玩笑。
安娜，勇往直前。
>> 学生：如果和其他人。
>> JASON HIRSCHHORN：如果和 否则 - 就在这里。
那么，做那些样子？
>> 学生：一个if else语句。
>> JASON HIRSCHHORN：是啊， 条件，对不对？
因此，我们可能会需要 写一些条件。
再次，虽然也许在混乱 首先，我们一般有一种感觉，现在
如何写条件和 语法条件。
如果我们不这样做，我们只是查查 语法条件下，剪切和粘贴
如此，因为我们知道我们 在这里需要一个条件。
我们看到，地图上的任何其他事情 事情，我们可能需要做C语言？
是啊，Aleha？
>> 学生：这可能是显而易见的， 通过只检查，如果一个
值等于什么。
>> JASON HIRSCHHORN：那么我们该如何检查 和 - 所以去到列表的中间
并检查我们的价值在那里？
我们怎么做，在C？
什么是语法是什么？
>> 学生：等于，等于。
>> JASON HIRSCHHORN：等于，等于。
所以，这个检查很可能会 是一种平等的，平等的。
所以我们知道我们需要在某个地方。
而实际上，只是在写它， 我们看到其他的事情。
我们将不得不做一些 比较操作符在那里 -
太棒了。
因此，它实际上看起来像，并通过 大，我们还没有写一个
C代码字呢。
但我们得到的心智模式下来 通过讲座和那些短裤。
>> 我们写的伪代码为一组。
而且，我们已经有80％，如果不 90％的是我们需要做的。
现在，我们只需要编写 它，这又是一个
非平凡的问题要解决。
但至少我们坚持的逻辑。
至少现在，当我们去到上班时间， 我可以说，我知道我需要什么
这样做，但你可以提醒 语法我吗？
或者即使上班时间都挤，你 可以为谷歌的语法，而
不是被卡住的逻辑。
>> 再次，而不是试图解决 逻辑和语法问题都
一次，它往往是要好得多 破解这两个难题扎进
2更易于管理的和做的 伪代码在C中，然后再代码
因此，让我们看看我做的 伪代码的时间提前。
>> 而该列表的长度大 大于零，看中间
的列表。
如果发现号返回true，否则 如果数值越高，搜索左。
否则，如果数量少，搜索 右，返回false。
这样，看起来几乎一模一样，如果不 几乎相同，我们写了。
事实上，汤姆，你先说什么， 断，如果在列表中，中间
发现成两个语句数 其实是我做了什么。
>> 我结合他们那里。
我应该听 你的第一次。
所以这是伪代码，我们有。
如果你想现在，对不起，请 回到我们最初的问题。
让我们的代码binary.c。
因此，实现一个迭代版本的 使用下面的二进制搜索
函数声明。
>> 而且你也不需要复制 下来，只是还没有。
实际上，我要去开 右上这里binary.c。
因此，有函数声明 在屏幕的中间。
你会看到我拿着伪代码 从我的两侧，但几乎是相同的
什么，我们写的， 把在为你。
所以，现在，让我们花五分钟 编写这个函数。
>> 再次，如果您有任何疑问， 举起你的手，让我知道，我会
来到我身边。
>> 学生：[听不清]。
>> JASON HIRSCHHORN：所以我把二进制 在定义搜索
顶，上线12。
这就是我为我的幻灯片。
然后这一切的伪代码，我只是 复制并从滑动粘贴
伪代码的幻灯片。
我仍然不听[听不清]。
>> 所以，如果你已经完成了你的 实现，我要检查它。
我发邮件给你的helpers.h文件 在前面这个类。
这将是在网上以及 下载的人看
本节的时间延迟。
而我只是用一般的分布 从pset3代码。
所以我把find.C，用我的helpers.h文件 而非helpers.h文件
这是由于在分配码。
>> 我不得不做出一个其他变动 find.C而不是调用只是简单地
搜索，调用binary_search的。
所以，如果你想测试你的代码， 知道这是如何做到这一点。
事实上，当我们将执行这个代码 现在，我只是做副本
我pset3目录，再次换出 佣工文件，然后作出
在find.C改变binary_search的调用 而不是简单的搜索。
>> JASON HIRSCHHORN：是的。
你有问题吗？
>> 学生：没关系。
>> JASON HIRSCHHORN：不用担心。
好吧，让我们开始吧。
我们将编写此为一组。
另外一个说明。
再次，这是，可以很容易地进行交换 在对习题集三。
我有我的helpers.h文件，该文件，而 比helpers.h我们给出，
声明二进制搜索，泡 排序和选择排序。
而在find.c你会发现就行， 那是什么，第68行，我们称之为二进制
搜索，而不是搜索。
所以，再一次，这是可用的代码 在网上，或者您是代码
创建现在可以很容易地交换 在对p设置3进行检查。
>> 但首先，让我们来编码二进制搜索。
我们的函数声明， 我们返回一个布尔值。
我们采取所谓的整数。
我们以一个整数数组称为 价值观，我们取n是
该数组的大小。
在第10行，就在这里，我有 犀利包括stdbool.h。
有谁知道为什么会在那里？
那么，这行代码呢？
>> 学生：它可以让​​你 使用一个bool返回类型。
>> JASON HIRSCHHORN：没错。
>> 学生：或者它是一个库，它允许 使用一个bool返回类型。
>> JASON HIRSCHHORN：那么尖锐包括 stdbool.h行给了我一些
定义和声明的东西 那我可以使用
这个库。
因此，在那些被说有 这种类型被称为布尔，并且它可以是
真的还是假的。
所以，这就是该行做。
如果我没有那行，我会 惹上麻烦写这
字就在这里，布尔，在那里。
完全正确。
所以我需要在这个代码。
确定。
所以这再一次是一个迭代 版本，而不是递归1。
因此，让我们开始吧。
>> 让我们开始这第一 线的伪代码。
并希望，我们会 - 或没有希望。
我们要绕过去了房间。
我们会去一行一行的，我会帮助 你弄清楚，我们需要的行
先写。
因此，尽管名单的长度 大于零。
让我们开始在前面。
我应该写什么线 在这里，在代码中？
>> 学生：虽然括号 n为大于0。
>> JASON HIRSCHHORN：虽然 n是伟大大于0。
因此n是一个列表的大小， 我们正在检查，如果 -
>> [插VOICES]
>> JASON HIRSCHHORN： - 对不起？
>> 学生：我们如何知道 n是列表的大小？
>> JASON HIRSCHHORN：对不起。
每pset的规范，搜索 和排序功能，你需要写，
n是该列表的大小。
我忘了解释这一点。
但肯定的。 n为的大小 的列表中，在这种情况下。
所以，当n大于0。
确定。
这可能证明是有点问题 不过，如果事情继续下去。
因为我们将继续了解 列表的大小在整个
功能，但说我们开始 与由5个整数的数组。
我们通过和我们已经 现在把范围缩小到
2个整数的数组。
这2个整数是什么？
大小为2，现在我们要 看，但2是什么？
这是否有意义，这问题吗？
>> 确定。
我会再问吧。
因此，我们用5这个数组开始 整数，n等于5，对不对？
我们将通过这里运行。
我们可能会改变大小， 权利，继续发展下去。
这就是我们说我们想做的事情。
我们不希望搜索 完整的东西了。
所以说，我们将其更改为2。
我们把一半的任务列表，奇怪。
所以，随便挑2。
所以，现在n等于2。
我为穷人道歉 干擦标记。
对不对？
我们正在寻找通过列表 再次用大小为2的列表。
那么，我们的数组的大小是5还是。
我们说，我们只是想 搜索2点在里面。
因此，这2点是那些？
>> 这是否有道理？
他们是左2点？
他们是正确的2点？
是他们中间的2点？
我们已经分手了问题了，我们却 居然不知道其中的一部分
我们仍然在寻找这个问题， 只是通过让这些2变量。
因此，我们需要多一点的话， 而n为大于0。
我们需要知道在哪里 n是在我们实际的数组。
>> 所以，没有任何人有一个 改变这条直线？
大多数这条线是 完全正确的。
难道还有其他的另外？
我们可以交换的东西出来n到 使这条线好一点？
嗯？
>> 学生：你能初始化变量 像长度为n的会被用来
在后面的功能？
>> JASON HIRSCHHORN：所以初始化 可变长度为n，
我们使用以后呢？
但是，我们刚刚更新的长度和我们 仍然会碰到这个问题，我们
减少我们的问题的长度， 但我们永远不知道，其实，
该长度映射到。
>> 学生：是不是要发生 以后当你说，搜索左，
搜索吧？
你会去一个不同的 您的区域 -
>> JASON HIRSCHHORN：我们打算去 一个地区，但我们怎么知道
这是去？
如果我们只有数组，这 N，我们怎么知道在哪里
到阵列中。
在后面，是吗？
>> 学生：你有一样，较低的 界和上界变量或
类似的东西？
>> JASON HIRSCHHORN：确定。
所以这是另一种思路。
而不是仅仅跟踪的 大小，我们保持了较低的轨道，
上界变量。
那么，我们如何计算从大小 下限和上限？
>> [插VOICES]
>> JASON HIRSCHHORN：减法。
并且还保持跟踪的下 绑定和上界，让我们知道，
我们正在寻找这两个？
难道我们寻找这两个在这里？
我们正在寻找中间的两个？
也许不是中间的两个，因为 这一点，其实是二进制搜索。
但是，现在我们就可以得到大小， 而且该阵列的界限。
从本质上讲，如果我们有我们的巨人 电话簿，我们撕成两半。
我们现在知道，较小的 电话簿。
但我们实际上并不翻录 电话簿的一半。
我们还需要知道在哪里 我们的问题的新范围是。
没有任何人有任何疑问， 有关？
是吗？
>> 学生：它会通过创建工作 变量i，你然后就转移
我相对于它的位置 当前位置，并且长度中，n？
>> JASON HIRSCHHORN：什么是我？
>> 学生：就像我是喜欢那种 -
就像你会初始化我是 阵列的中间位置。
然后，如果在位置i的值在 在阵列的发现中间
低于您所需要的价值，我现在 成为该阵列的长度，加上
i的值除以2。
像，看，你转向我 -
>> JASON HIRSCHHORN：对。
>> 学生： - 到 -
>> JASON HIRSCHHORN：所以我几乎 正面，将工作。
但问题是，你需要两个 件的信息在这里。
您可以用开头和结尾做， 或者你可以用大小做，然后
一些标记。
但你需要两件 此处的信息。
你不能用只有一个。
这是否有道理？
>> 所以，我们要通过，并 我们要做的[听不清]
并创建一些标记。
所以，你在你的代码写的什么了？
>> 学生：我刚才说的整型界 1等于0。
>> JASON HIRSCHHORN：让我们把 这个int，开始。
>> 学生：确定。
>> JASON HIRSCHHORN：这使得 更有意义对我来说。
和？
>> 学生：我说，我猜，廉政结束。
>> JASON HIRSCHHORN：INT结束。
>> 学生：我猜，N减1， 或者类似的东西。
像，最后一个元素。
>> JASON HIRSCHHORN：所以你写，诠释 开始等于0，分号和INT
结局等于n，减去1，分号。
所以基本上，我们在做什么 这里，0的第一个位置。
正如我们所知道的阵列，他们不走 最多n，它们上升到n减去1。
因此，我们有我们的数组的一些界限。
而这些初始范围恰好是 我们的问题的初始边界。
确定。
所以这听起来不错。
然后，如果我们再回到这一行，而 列表的长度是大于0，
什么，而不是n，应 我们摆在这里？
>> 学生：写结束减去开始。
>> JASON HIRSCHHORN：虽然结束负 开始是大于0？
确定。
我们可以，如果我们想 做一个更好一点，有什么
我们还能做什么？
如果我们想要清理 这段代码了一点？
我们怎样才能摆脱0？
这仅仅是一个风格问题。
这是正确的现在。
>> 学生：期末不 等于开始？
>> JASON HIRSCHHORN：我们可以做什么呢？
>> [插VOICES]
>> 学生：期末更大？
>> JASON HIRSCHHORN：是啊。
我们可以在刚刚结束的做 大于开始。
右。
我们增加了开始的另一边 那，我们摆脱了0。
因此，这只是看起来 点点清洁剂。
确定。
因此，尽管名单的长度为0，我们写 ，虽然结局是更大
比开始。
我们打​​算把我们的需要 大括号，然后第一件事
我们想要做的是看 他们在一个小列表。
你呢？
你可以给我 -
>> 学生：如果括号 价值括号 -
>> JASON HIRSCHHORN：如果括号 值的方括号。
>> 学生：结束除以2。
>> JASON HIRSCHHORN：结束？
>> 学生：我看到你的一个问题 -
>> JASON HIRSCHHORN：确定。
好吧，看在中间。
我们怎么知道中间是什么？
是啊。
因此，让我删除那些代码。
我们怎么知道中间是什么？
在任何事情，当你有初 而最终，你怎么找到
中间？
>> 学生：你平均。
>> 学生：你将它们添加 在一起，然后 -
>> JASON HIRSCHHORN：加入他们 在一起，然后？
>> 学生：你平均。
除以2。
>> JASON HIRSCHHORN：加入他们 在一起，除以2。
所以整型中间等于？
汤姆，你可以把它送给我吗？
>> 学生：期初加期末 -
>> JASON HIRSCHHORN：开始 加上结束。
>> 学生：全部，支架，除以2。
>> JASON HIRSCHHORN：所有在括号， 除以2。
所以，让我中间 任何事物，正确吗？
>> 学生：你还需要它向上舍入。
>> JASON HIRSCHHORN：你这是什么 意思是，我需要它向上舍入？
>> [插VOICES]
>> 学生：因为，如果这是一个奇怪的 号码，然后它就像 -
>> JASON HIRSCHHORN：嗯，好吧。
这样我就可以把它向上舍。
但如果它是奇数，5，我可以 服用1远离中间。
或者，如果它是偶数，相反， 这是一个更好的情况。
如果是4，我们只有4，我可以带 第一个“中间”，报价，引文或
第二个“中间”之一。
要么将工作二进制搜索， 所以我实际上并不需要圆形的。
但有一件事我 需要看看这条线。
我们可能没有意识到这一点， 但我们会回来的。
因为这条线实际上仍然 需要一件事。
>> 但到目前为止，我们已经写了 四行代码。
我们已经得到了我们的开始 和结束标记。
我们有我们的while循环，它映射 对直接向我们的伪代码。
我们正在寻找一个映射中间 直接到我们的伪代码。
我会说这正好到中间 名单，这行代码。
然后，一旦我们去的中间 在列表中，我们需要做的下一件事
被检查，如果我们的价值如何， 伪代码，我们之前写的。
>> 那么我们该如何检查，如果我们的价值 在列表的中间？
您。
你为什么不这样做呢？
>> 学生：如果我们的价值的是 在中间是等于
无论我们设定 -
我的意思是等于等于 -
>> JASON HIRSCHHORN：它 -
确定。
>> 学生：我不知道是什么 变量，我们正在寻找
因为虽然，是因为 -
>> [插VOICES]
>> 学生：[听不清]。
>> JASON HIRSCHHORN：没错。
每个函数的声明， 我们正在寻找一个值。
所以，我们正在寻找一个值 在值的数组。
所以你完全正确。
你会做，如果开放的括号值支架 中间闭合支架等号
等于价值，里面有 什么我们需要做什么？
如果我们的价值的存在，是什么 我们需要做什么？
>> [插VOICES]
>> 学生：返回零。
>> JASON HIRSCHHORN：返回true。
>> 学生：返回true。
>> JASON HIRSCHHORN：迈克尔， 这是什么线路呢？
>> 学生：[听不清]程序已经运行 它的路线，那就是结束了，
你已经什么你需要做什么？
>> JASON HIRSCHHORN：程序还是什么？
在这种情况下？
>> 学生：该功能。
>> JASON HIRSCHHORN：该功能。
因此，要返回到任何所谓的 它并给它的价值，真正的。
完全正确。
主。
什么是返回类型 主，迈克尔？
>> 学生：整型，整型？
>> JASON HIRSCHHORN：整型，没错。
一个整数。
这仅仅是一个问题，以确保 你们已经在它的上面。
这是什么通常会返回，如果 所有的东西都运作良好？
>> 学生：零。
>> JASON HIRSCHHORN：零。
完全正确。
>> 学生：如果这只是返回true， 没有信息报错
关于什么的 -
呵呵，这只是说了 值的数组里面。
>> JASON HIRSCHHORN：没错。
这个程序没有提供资料 的确切位置值。
它只是说，是的，我们发现 它，或者没有，我们没有发现它。
所以，如果发现号，返回true。
嗯，其实我们只是做了真正 迅速与一行代码。
因此，我将动议该行伪代码的。
>> 学生：不，我们需要 改变数组？
它应该是值，而不是价值，对不对？
>> JASON HIRSCHHORN：对不起。
谢谢。
>> 学生：是啊。
>> JASON HIRSCHHORN：此行 应该是价值观。
完全正确。
确定。
因此，我们已经看了看中间列表。
如果发现号返回true。
我们的伪代码继续，如果 中间是更大的，搜索就走了。
所以，我在这里，如果数 更高，搜索就走了。
康斯坦丁，你可以给 我这行代码？
>> 学生：如果中间值 -
>> JASON HIRSCHHORN：所以，如果值 -
如果开括号值支架 中间靠近支架 -
>> 学生：是不是值小？
>> JASON HIRSCHHORN：是小于。
>> 学生：比价值减。
>> JASON HIRSCHHORN：值。
嗯，其实，你要 检查数量 -
抱歉。
这是一个有点混乱。
但如果其他的数 名单的中间是更大的。
>> 学生：哦，好吧。
>> JASON HIRSCHHORN：我会改变这种状况。
否则，如果中间是较高的，我们 要搜索左，好不好？
而我们该怎么做内部 这一点，如果条件？
>> 学生：我可以做一个小改动 的情况下，如果将其更改为别的吗？
>> JASON HIRSCHHORN：否则，如果？
确定。
所以这段代码将执行 大致相同。
但是如果左右，其他使用好处 如果，否则，如果还是如果，否则，如果，否则
也就是说，只有其中的一个是要 进行检查，而不是他们三个，
可能。
这使得它一点点 电脑这是上更好
运行你的程序。
>> 所以，[？康斯坦丁？]
我们这一行里面，否则，如果值， 支架中间右方括号
大于价值。
什么是我们需要做什么？
我们需要搜索的左侧。
我们该怎么做呢？
我想给你一个开始。
>> 我们有这两样东西叫 开始和结束。
因此，需要做些什么 要开始？
如果您要搜索的左边 列表中，我们得到我们当前开始的。
我们需要什么做的呢？
>> 学生：我们设置开始 到中间加1。
>> JASON HIRSCHHORN：所以，如果我们 寻找左侧？
>> 学生：对不起，中间减去 -
这样的结局会是中间 减1和开始 -
>> JASON HIRSCHHORN：什么 碰巧的开始？
>> 学生：它保持不变。
>> JASON HIRSCHHORN：所以 含义保持不变。
如果我们在搜索的左边，我们 使用相同的开头 -
完全正确。
而故事的结局？
对不起，什么是 再次结束平等的吗？
>> 学生：中减去1。
>> JASON HIRSCHHORN：中减去1。
现在，为什么减1，不只是中间？
>> 学生：中间是出 图片已经，因为我们有
检查它的呢？
>> JASON HIRSCHHORN：这是 完全正确。
中间是出来的图片。
我们已经检查了中间。
所以，我们不希望“中间，”报价 引文结束后，继续在该
数组，我们正在寻找。
因此，这是梦幻般的。
>> 否则，如果值支架中间是更大 比值等于结束
中间减1。
杰夫，你看这个最后一行？
>> 学生：否则。
中间值小于值？
>> JASON HIRSCHHORN：我们会 你给我的东西。
所以，如果你不给我 -
>> 学生：所以后来开始 将中间加1。
>> JASON HIRSCHHORN：平等开始 中间加1，再一次，对于相同的
原因是君士坦丁 给了我们前面。
并在最后，谁没有给 我的代码行了吗？
返回false，Aleha什么 我们写在这里？
>> 学生：返回false。
>> JASON HIRSCHHORN：返回false。
而我们需要做的，因为如果我们 并不觉得，我们需要说我们
没有发现它。
和我们说我们要返回一个 布尔，所以我们肯定是要返回
一个bool地方。
>> 因此，让我们运行此代码。
实际上，我要 -
所以我们在终端。
我们将清除我们的窗口。
让我们把所有的。
我们发现有一个错误。
还有第15行错误，预期 分号的结束
声明。
所以，我怎么忘了？
>> 学生：分号。
>> JASON HIRSCHHORN：分号 直到这里。
我认为这是汤姆的代码。
因此，汤姆，[听不清]。
只是在开玩笑。
让我们做所有的再制作。
>> 学生：什么Dropbox的目录 我们应该在这？
>> JASON HIRSCHHORN：所以，你可以 只是看这一点。
但同样，如果你想提出这个 代码到您的pset3目录试试
出来，这就是我所做的。
如果你会发现在这里 - 对不起，很好的问题。
>> [？ LS，？]
我在这里find.c代码 从本周的发行版的代码。
我有helpers.h。
我有一个Make文件我实际上是 编辑了一下，包括这些新
我们正在编写的文件。
所有这些代码将是可用的，不 分配的代码，但新
制作文件，新helpers.h文件将 是下载在网上提供。
同样地，所以这些都是在 额外的代码，我们有。
>> 因此，请所有，每本线，使得查找， 二，泡选择 - 品牌
他们三个都和编译成 这个可执行文件代码中找到。
所以一般情况下，我们不希望 直到check50。
我们要对我们自己运行一些测试。
但是，仅仅如此可加快我们这一点， check50 2013 pset3.find将通过
在helpers.c- - 我的坏。
>> 我没有说现在。
因此，我们实际上是要 运行实际的代码。
Usage.find /，你知道这意味着什么？
>> 学生：你需要第二个 在它的命令行。
>> JASON HIRSCHHORN：我需要 第二个命令行。
并根据规范要求，我需要 进入我们正在寻找的东西。
因此，让我们来看看42。
我们将保持它在排序的，因为我们 没有写一个排序功能，但 -
42，43，44。
>> 和控制D没找到 大海捞针。
这是不好的。
这是肯定有的。
让我们试试别的。
也许这是因为我把 它在开始。
>> 让我们做41，42，43。
我们走吧。
它发现了它。
让我们把它在结束现在，只 所以我们可以彻底的 -
40，41，42。
没有找到针头。
所以我提到这点。
不幸的是，我知道这 将要发生。
>> 但用于教学目的， 这是很好的探索它。
这是行不通的。
出于某种原因，它无法找到它。
我们知道什么是在那里，但 我们目前还没有找到它。
所以，有一件事我们可以做的是通过 GDB找到它，但确实有人，
无需通过GDB，有 在哪里，我们搞砸了有意义吗？
[？摩杜？ ？]
>> 学生：我想可能是结束的时候 等于开头，它的
只是一个元素的列表。
然后，它会忽略它，而不是 实际检查它。
>> JASON HIRSCHHORN：这是 完全正确。
当结束等于开始，我们做 还有在我们的列表中的元素？
>> 学生：是的。
>> JASON HIRSCHHORN：是的，事实上，我们 有一个且仅有一个元件。
而这将极有可能发生时， 每次我们测试过的代码，我们在
干草堆或柜台 干草堆的结束。
这就是开始和 结局是要等于
之一，二分查找。
因此，在这两个情况下，没有工作， 因为结束等于开始。
>> 但是，如果结束等于开始， 这是否while循环执行？
它没有。
而且我们也可以检查 这再通过GDB。
那么，如何才能解决这个问题的代码，因为 当结束时等于
开始，我们也希望这 while循环运行。
>> 因此，我们可以做什么修复到第18行？
>> 学生：[听不清]大 小于或等于。
>> JASON HIRSCHHORN：完全正确。
虽然结局是大于 或等于开始。
所以，现在，我们一定要得到那 角落的情况在年底。
让我们来看看。
让我们运行此一次。
>> 让我们所有。
同样，你必须只 跟着在这里。
找到41这个时间。
只要保持一致。
>> 找到42。
让我们把它在开始 -
42，43，44。
我们发现了它。
所以这的确是变化 我们需要做。
>> 这是一个很大的编码，我们的 只是做了，二进制搜索。
没有任何人有之前的任何问题 我谨对为我们写了线
二进制搜索或者我们怎么想通 什么我们没有搞清楚？
在我们继续之前，我也想点 指出，总的来说，我们映射
我们的伪代码之一 1到我们的代码。
>> 我们确实有一个棘手的事情 找出与
开始和结束。
但你有没有计算过了，你 会写相当多的
相同的代码，保存为 那些最上面两行。
然后你会意识到，当 您在检查和案件有否规定
你需要别的东西。
所以，即使你曾跟随我们 伪代码行来行，你就已经
得到了所有，但两行 你需要编写代码。
>> 而我愿意打赌，你们 本来都想通了这一点
很快，你需要把 某种标志物在有图
出你在哪里。
这又是干什么的力量 伪代码的时间提前。
所以我们可以做的逻辑，然后再 大家可以放心使用的语法。
>> 如果我们一直感到困惑的逻辑 而试图写这段代码在C中，
我们会得到全乱了。
然后我们就可以问的问题 逻辑和语法和网格
它们放在一起。
我们会得到丢失 在哪可以迅速成为一个
非常棘手的问题。
现在让我们继续前进 要选择排序。
>> 我们还剩下20分钟。
所以，我有，我们将不能够感觉 通过所有选择排序的获得
和冒泡排序。
但是，让我们至少尝试 完成选择排序。
因此，实现选择排序使用 下面的函数声明。
>> 再次，这是从 问题设置规范。
int值是括号，是 整数数组。
和int.n是该数组的大小。
选择排序是怎么回事 这个数组进行排序。
>> 因此，根据我们的心智选择的模型 排序，我们拉 -
首先，我们通过列表中的第一 时间，找到最小的数字，
把它放在开头，找到第二 最小的数字，把它放在
如果我们要第二位置 排序按升序排序。
我不会强迫你写 伪代码现在。
>> 但在此之前我们做的代码作为一个阶级的 五分钟，我们将写
伪代码，所以我们有一些感 的我们要去的地方。
因此，尝试写伪代码 在你自己的。
然后再尝试打开该 伪代码转换成代码。
我们将做到这一点作为一个群体 在五分钟内。
>> 当然，让我知道，如果 您有任何问题。
>> 学生：那呢？
>> JASON HIRSCHHORN：看看有多少你 可以在两分钟搞定。
我知道你不会 能够完成。
但我们将在此为一组。
>> 你所有的编码等等[听不清]，所以我 对不起暂停自己在做什么。
但是，让我们通过这作为一个群体。
再次，二分查找，大家给 我一个，如果没有更多行的代码。
谢谢你的。
我们打​​算做同样的事情 这里，作为一组一起码。
>> 所以，选择排序 - 让我们写 一些快速的伪代码。
每心智模式，可以有人给我 第一线的伪代码，好吗？
我想要什么做的？
>> 学生：虽然名单 出了毛病。
>> JASON HIRSCHHORN：OK，而 该列表是不合乎规程。
和你是什么意思“坏了？”
>> 学生：在[听不清]
没有被排序。
>> JASON HIRSCHHORN：虽然名单 出了毛病，我们该怎么办？
给我的第二行， 请，马库斯。
>> 学生：所以找到下一个 最小的数字。
这将缩进。
>> JASON HIRSCHHORN：所以找到 下一个最小的数。
然后别人？
一旦我们找到下一个最小的 数，我们该怎么做？
我要说找 的最小数量。
这就是我们想要做的。
>> 因此，找到最小的数字。
那么我们该怎么做？
>> 学生：[听不清]为开端。
>> JASON HIRSCHHORN：对不起？
>> 学生：在将其放置 开始列表。
>> JASON HIRSCHHORN：所以把它放在 在列表的开头。
而我们做的事情是什么 这是在开始
列表中的，对不对？
我们覆盖的东西。
那么，我们把那？
是啊，安娜？
>> 学生：其中最小 数字是？
>> JASON赫希洪：所以把开始 列表中的其中
最小的数字了。
因此，尽管名单已经出来的顺序，找到 最小的数字，将其放置在
该列表的开头，把 开始列表的其中
最小的数字了。
马库斯，你可以整理这条线 而名单已经出来了的秩序？
>> 学生：虽然数字 未分类的？
>> JASON赫希洪：OK，所以为了 知道这些数字都没有
排序的，什么是我们需要做什么？
有多少，我们需要 通过这个名单？
>> 学生：所以我想一个for循环，或 同时，在检查数量较少
比列表的长度是多少？
>> JASON赫希洪：好，这是很好的。
我想我misphrased 我的问题知之甚少。
我只是试图让在 我们将不得不去
在整个列表。
因此，尽管名单已经出来的顺序， 对我来说，是很难地图。
但基本上，这就是如何 我想这个问题。
通过整个列表中，找到 最小数，将其放置在
开始 - 其实，你说得对。
让我们把他们两个。
>> 因此，尽管名单已经出来了的订单，我们 需要经过整个列表
一次，找到最小的数字，地点 它在列表的开头，把
在列表的开头，其中 最小数目是，然后，如果
列表仍然失灵，我们已经 得去通过这个
进程再次，对不对？
这就是为什么选择排序，大O运行 选择排序的，任何人吗？
>> 学生：无平方。
>> JASON赫希洪：无平方。
因为像马库斯，我才意识到 在这里，我们将不得不
通过列表名单 的次数。
所以，经历的事 长度为n的n次号
其实是在Ñ平方。
>> 所以这是我们的伪代码。
这看起来很不错。
没有任何人有任何疑问， 关于伪？
因为实际上选择排序应该 大概要一对一，代码
伪代码。
因此，任何有关问题 伪代码的逻辑是什么？
现在请提问。
>> 选择排序 - 而名单已经出来了 的顺序，我们将通过它
并找出最小的每次 并把它放在前面。
因此，尽管名单已经出来了，可以顺序 有人给我说行代码谁
还没有给我行 然而，代码好吗？
这听起来像一个什么？
>> 学生：这是一个for循环。
>> JASON赫希洪：听起来 喜欢一个for循环。
OK，你可以给我的for循环？
对于 -
>> 学生：我等于0。
>> JASON赫希洪：我还是 -
什么是我们缺少什么？
善有善报就在这里？
>> 学生：诠释。
>> JASON赫希洪：没错。
（INT I = 0; -
>> 学生：我<N; i + +）。
>> JASON赫希洪：钉它，杰夫。
我们正在经历的列表中，右键？
我们以前见过的代码。
完美的。
所以，让我们把我们的大括号在这里。
我打算把一些 大括号在这里。
>> 因此，尽管它是0，我们需要去 整个列表。
所以每次我们去通过列表， 什么我们想跟踪的？
>> 学生：如果有任何掉期进行。
>> JASON赫希洪：查找 的最小数量。
因此，我们或许应该跟踪 最小的数字各一次。
所以，行，我可以做些什么来保持跟踪 最小是多少？
Aleha，我怎么能保持 轨道的东西？
>> 学生：开始一个新的变量。
>> JASON赫希洪：开始一个新的变量。
因此，让我们创建一个变量。
什么类型的？
>> 学生：诠释。
>> JASON赫希洪：诠释。
让我们把它称为最小的。
以及它等于什么时候 我们刚刚起步的？
我们并没有在列表中消失了呢。
我们在的第一部分 通过列出我们的第一次。
什么是平等的， 最小的数字？
>> 学生：我的值。
>> JASON赫希洪：值I。
这听起来完全正确的，对不对？
最小数目的开头 就是我们在哪里。
所以现在我们有我们最小的，我们需要 要经过整个列表和
比较这最小的 到一切。
那么，我们通过清单了吗？
迈克尔？
>> 学生：你需要做 另一个循环。
>> JASON赫希洪：另一个for循环。
让我们开始吧。
给我一些代码。
>> 学生：For循环 -
为最小 -
只是诠释J，你可以说？
= 0;使得 -
>> JASON赫希洪：嗯，如果我们想 要经过整个列表 -
>> 学生：百灵<N，J + +）。
>> JASON赫希洪：神奇。
我们将通过 for循环一次。
我们如何找到 最小的数字？
汤姆？
我们目前最小的数字， 那么如何才能找到新的最小？
>> 学生：我们可以检查最小 我们也数大于
重视支架Ĵ。
>> JASON赫希洪：所以，如果最小的是 比数值支架Ĵ更大。
因此，如果我们目前最小的 大于 -
我要在这两个线 对于第二个在那里的代码。
因为之前我们做任何交换，我们 需要经过整个列表。
所以这个伪代码实际上应该 在外面的内循环。
这样下去整个列表。
如果最小的大于 值Ĵ然后呢？
>> 学生：那最小的 等于值Ĵ。
>> JASON赫希洪：神奇。
一个简单的问题 -
我们第一次去通过这个循环， 我是怎么回事等于0，J是怎么回事
等于0，一旦我们在这里得到的。
所以，我们要进行比较 一个数字本身。
是有效的？
不，这不是真的有效。
因此，没有我们的Ĵ需要去 从0到n每次？
我们总是需要检查 整个列表？
[听不清]？
>> 学生：开始我代替。
>> JASON赫希洪：j的 先从什么？
>> 学生：我。
>> JASON赫希洪：j的与我开始。
所以，现在我们开始比较 有一个我们的。
但即便如此，是因为 尽可能高效？
>> 学生：我+ 1。
>> JASON赫希洪：I + 1似乎是 最有效的，因为我们
已经有我。
我们指出，由于 最小的线15。
我们将开始与 自动下单。
所以，我们通过for循环。
我们将通过各一次。
我们将通过数次。
现在，我们通过已经得到了 这种内在的for循环。
我们有最小的值保存。
我们需要将其放置在 开始列表。
所以，我怎么把它放置在 开始清单？
这是指该变量 到列表的开始？
我们在此为外循环， 还等什么指
开始清单？
>> 学生：我的值。
>> JASON赫希洪：完全正确。
值i是的开始 -
或不好意思，不是开始。
这是令人困惑的。
这也正是我们在年初 列表中的未排序的部分。
因此，重视我。
而这是什么平等？
>> 学生：最小。
>> JASON赫希洪：值i等于什么？
>> 学生：最小。
>> JASON赫希洪：最小。
完全正确。
所以我们将它放在开头 名单的，现在我们需要把
该列表的开始的地方 最小的数字了。
所以，我怎么写的地方 最小的数是？
什么价值观？
>> 学生：0。
>> JASON赫希洪：小 数字是0？
>> 学生：是啊。
>> JASON赫希洪：那如果最小 人数在年底
这个无序列表？
>> 学生：对不起，究竟是什么问题？
>> JASON赫希洪：哪里是 最小的数字？
我们采取了最小，并把它在 开始，这条线就在这里。
>> 学生：它应该有 被存储在某种 -
>> 学生：值Ĵ。
>> JASON赫希洪：嗯，这是 不一定值Ĵ。
它甚至没有在这一点上存在。
>> 学生：你要申报 一个变量更早，
然后将其分配到 -
当你发现的最小的数字， 该号码的索引分配给
一些变量或类似的东西。
>> JASON赫希洪：所以可以 你再说一遍吗？
>> 学生：那么，您声明整型 最小的，你也应该申报诠释
最小的index = i或 类似的东西。
>> JASON赫希洪：那么，我INT 最小的，我不应该只跟踪
的价值，但位置。
整型smallest_location =在这 情况下，我们就做我。
我们需要知道它在哪里。
我们到了代码的末尾，我们 意识到我们根本不知道在哪里。
于是再次，我们的映射 这在一一对应的。
你们在自己的意志编码这种 可能得到了同样的问题。
如何赫克我找到它？
然后你意识到，等待，我 需要跟踪的那个。
>> 所以，如果最小的是更大 比的值Ĵ。
我们设定最小等于值Ĵ。
我们需要改变什么？
康斯坦丁，还有什么 我们需要改变？
>> 学生：位置。
>> JASON赫希洪：没错。
所以给我的代码行。
>> 学生：smallest_location = j的。
>> JASON赫希洪：没错。
然后降底，如果我们想 放在列表的开头，其中
最小的数字是，如何 我们指该
最小的数是？
马库斯？
>> 学生：最小数为 位于最小位置。
>> JASON赫希洪：所以在价值观 smallest_location。
而我们放什么呢？
的初 列表中，那是什么？
>> 学生：嗯，我们真的不知道 了，因为我们改写。
所以这是一个交换位置 在这两行？
如果你周围的切换这两行。
>> JASON赫希洪：好了，我们不 了，因为我们已经复位线
前值i到最小。
所以我们失去了初始值。
所以你说的交换这两行。
所以现在把列表的开头 其中最小的数是。
所以smallest_location等于值I。
这是移动今年年初 的列表中的未排序的部分
最小的位置。
然后进入我的值我们正在 即最小数。
>> 这是否有意义，为什么我们 不得不作出这样的交换？
我们会覆盖该值 - 另一件事，你可能会有
想通了，并在国内生产总值中找到。
因此，我们已经照顾 所有的伪代码。
还有什么我们 需要在这里写？
有谁能够想到什么？
>> 学生：你怎么知道 当你做了什么？
>> JASON赫希洪：我们如何 知道什么时候我们做了什么？
大的问题。
那么，我们如何知道什么时候，我们就大功告成了。
>> 学生：创建一个变量来计数 如果有做了一个交换与否
并办理了一通。
>> JASON赫希洪：确定。
将工作在冒泡排序。
但对于选择排序，如果我们不这样做 做一个交换，那可能只是
因为最小的值是 在它正确的位置。
我们可能有一个列表1，2，4，3。
通过我们的第二次 不会让任何掉期。
我们将在2号，但我们会 仍然需要继续下去。
那么，我们需要跟踪的时候 我们就大功告成了，还是我们只是想去
直到完成？
>> 学生：我们可以去 直到它完成。
>> JASON赫希洪：我们可以只 去，直到这个完成。
在冒泡排序，你是完全正确的， 杰夫和Aleha，与您的解决方案 -
它是伟大的跟踪有多少 掉期你做，因为在泡沫
排序，如果你实际上做不作任何掉期， 大功告成，你也许可以减少你
问题倒有几分。
但对于选择排序，你真的 有要经过的结束
列出在每个时间。
>> 因此，这是一点。
我们有两分钟时间。
让我们所有。
让我开在这里找到，让 相信我，其实调出 -
我不是叫冒泡排序。
让我们改变这个来选择排序。
使所有/找到。
让我们来看看42。
这一次，我们要传递一个 未排序的列表中，因为它应该排序
首先，每找到代码 - 要排序 第一次使用我们的排序函数，然后
寻找的东西。
手指交叉大家。
>> 哦，我的天啊。
哇，我的心脏跳动。
所以这是正确的。
事实上，如果我们跑这更 大量的代码，尽我所能
说，是完全正确的。
还有一些建议 我会为你。
例如，15和16似乎 有点多余。
好像你不一定 需要保存这两个。
如果您有最小的位置，你 可以很容易地找到最小值
只是打字的i值。
>> 所以，如果我是被分级代码， 我其实会，我会
大概起飞点，如果你 包括这两种，因为你
不需要这两个。
如果你有位置，可以 很容易获得的价值。
这似乎有点不可思议 来存储它们。
也许不拿一个点，而是 当然评论说，这也许是
不是一个风格上的选择 你需要做。
当然，该代码仍然 运转很好。
>> 所以很遗憾，我们没 得到冒泡排序。
我很抱歉这一点。
我们确实完成选择排序。
没有任何人有任何问题，最终 关于选择排序？
>> 好了，我们才探出头来，我要你 打开你的Chrome浏览器。
对不起，这仅仅是一个赤裸裸的插头 一种类型的互联网浏览器。
你可以打开任何类型的浏览器， 但它很可能是Chrome浏览器。
和去这个网站之后 -
sayat.me/cs50。
如果你不键入您的电脑 现在，你是清楚的
不这样做，汤姆。
>> 并且请做任何权利 现在还是在接下来的一个小时 -
给我一些反馈。
这只是部分中的两个。
我们有更多的共同拥有的，所以我 有很多的提升空间。
我希望也做了一些事情做好。
所以，你可以让我觉得全是坏事，但如果 你也想​​给我一个笑脸
脸，我将不胜感激这一点。
填补英寸
>> 并与留一分钟， 这是三周。
我就站在外面了一下 如果您有任何疑问。
我会看到你们 讲课的明天。