验证新写的排序最省事的办法
第 1 步:四种排序摆在一起比 第 2 步:先看时间量级 第 3 步:再看要不要额外空间 第 4 步:最后看稳不稳定 第 5 步:没有哪一种样样都好 时间 空间 稳定 冒泡 插入 归并 堆排 n² n² nlogn nlogn 1 1 n
四种排序结果都一样吗
运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #include <string> #include <
第一步两种平方级排序
最终作品第一步:bubble 已写好,补全 insertion 的内层,再比较两者结果,一样输出 一致,否则输出 不一致。 (本题用 g++ -std=c++17 -O0 编译。)
第二步归并排序
第二步:补全 merge_two 里「接上剩下那一边」的两行,排完用 / 拼起来输出。 (本题用 g++ -std=c++17 -O0 编译。)
第三步数出比较次数
第三步:bubble_cmps 已写好,补全 insert_cmps 的计数,把两者的比较次数用 / 拼起来输出(冒泡在前)。 (本题用 g++ -std=c++17 -O0 编译。)
第四步稳定性对比
第四步:用 stable_sort 按 key 排那四条记录,把名字用 / 拼起来输出——这就是稳定排序该有的样子。 (本题用 g++ -std=c++17 -O0 编译。)
交付四种排序加一份对比
这是这条路线的最终作品。冒泡、插入、归并、堆排、计数、快排深度、选型都已经写好,只剩插入排序的内层和堆排序的第二步。补全之后一次验完五条:四种排序都等于 std::sort 的结果;冒泡比较 10 次、插入 8 次;稳定归并排四条记录得到
修排序 bug 时先怎么自测
修完一个排序程序,最该先用哪种数据自测?答:【0】。
修好比较器
场景:实验机上 ~/work/sort/rank.cpp 读入「名字 分数」,按分数从高到低输出;同分按名字字典序从小到大。可比较器写成了 >=:同分的人顺序乱七八糟,数据一多还可能崩溃。 任务:修好比较器,让它满足严格弱序。make
修好归并漏掉的元素
场景:~/work/sort/msort.cpp 是一个归并排序,排出来的数总是比输入少几个。 任务:修好合并函数,一个元素都不能丢。make 编译后用 sample.txt 自测;check 会用随机数组(含空数组、单个元素、大量重复)对