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; - 学生:我