Skip to main content

实验 3:排序 - CS50x 2023

分析三个排序程序,以确定它们使用的算法。

背景

回顾一下讲座内容,我们学习了几种对数字序列进行排序的算法:选择排序、冒泡排序和归并排序。

  • 选择排序遍历列表的未排序部分,每次选择最小的元素并将其移动到正确的位置。
  • 冒泡排序一次比较一对相邻的值,如果它们的顺序不正确,则交换它们。 重复此步骤,直到列表排序完成。
  • 归并排序递归地将列表重复分成两部分,然后将较小的列表按正确的顺序合并回一个较大的列表。

开始

打开 VS Code

首先单击终端窗口内部,然后单独执行 cd。您应该发现其“提示符”类似于以下内容。

单击该终端窗口内部,然后执行

wget https://cdn.cs50.net/2022/fall/labs/3/sort.zip

然后按回车键,即可在您的 codespace 中下载名为 sort.zip 的 ZIP 文件。 请注意 wget 和 URL 之间的空格,以及其他任何字符都不能省略!

现在执行

unzip sort.zip

创建一个名为 sort 的文件夹。 现在可以删除 ZIP 文件了,执行以下命令

rm sort.zip

并在提示符后输入 'y' 并按回车键删除下载的 ZIP 文件。

现在输入

cd sort

然后按回车键进入该目录。 此时的提示符应该类似如下。

如果一切顺利,您应该执行

ls

您应该看到一系列 .txt 文件以及可执行程序 sort1sort2sort3

如果您遇到任何问题,请再次按照这些相同的步骤操作,看看您是否可以确定出错的地方!

说明

提供给您的是三个已经编译好的 C 程序,sort1sort2sort3。 这些程序中的每一个都实现了不同的排序算法:选择排序、冒泡排序或归并排序(但不一定按该顺序!)。 您的任务是确定每个文件使用哪种排序算法。

  • sort1sort2sort3 是二进制文件,因此您将无法查看每个文件的 C 源代码。 为了确定哪个程序使用了哪种排序算法,可以在不同的数据列表上运行这些程序。
  • 我们提供了多个 .txt 文件。 这些文件包含 n 行值,这些值是反向的、随机的或已排序的。
    • 例如,reversed10000.txt 包含 10000 行从 10000 反向排列的数字,而 random10000.txt 包含 10000 行随机顺序的数字。
  • 要在文本文件上运行排序,请在终端中运行 ./[program_name] [text_file.txt]。 请确保您已经使用 cd 命令进入了 sort 目录!
    • 例如,要使用 sort1reversed10000.txt 进行排序,请运行 ./sort1 reversed10000.txt
  • 对排序过程进行计时可能会对您有所帮助。 为此,请运行 time ./[sort_file] [text_file.txt]
    • 例如,您可以运行 time ./sort1 reversed10000.txt 以在 10,000 个反向数字上运行 sort1。 在终端输出的末尾,您可以查看 real 时间,以了解运行程序实际经过了多少时间。
  • 通过填写标有 TODO 的空白,将您的答案以及每个程序的解释记录在 answers.txt 中。

演示

提示

  • 不同类型的 .txt 文件可能有助于您确定哪个排序是哪个。 考虑每种算法在已排序列表中的表现如何。 反向列表呢? 还是随机列表? 您可以尝试使用较小规模的各类列表,并逐步分析每种排序算法的执行过程,这可能会对您有所帮助。

不确定如何解决?

如何检查您的答案

执行以下命令以使用 check50 评估您的答案是否正确。 但请务必填写您的解释,check50 在这里不会检查!

check50 cs50/labs/2023/x/sort

如何提交

在您的终端中,执行以下命令以提交您的工作。

submit50 cs50/labs/2023/x/sort