实验 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