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 文件以及可执行程序 sort1、sort2 和 sort3。

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

说明​

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

  • sort1、sort2 和 sort3 是二进制文件,因此您将无法查看每个文件的 C 源代码。 为了确定哪个程序使用了哪种排序算法,可以在不同的数据列表上运行这些程序。
  • 我们提供了多个 .txt 文件。 这些文件包含 n 行值,这些值是反向的、随机的或已排序的。
    • 例如,reversed10000.txt 包含 10000 行从 10000 反向排列的数字,而 random10000.txt 包含 10000 行随机顺序的数字。
  • 要在文本文件上运行排序,请在终端中运行 ./[program_name] [text_file.txt]。 请确保您已经使用 cd 命令进入了 sort 目录!
    • 例如,要使用 sort1 对 reversed10000.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