让数据按题意排好
这一课只练一件事:用 决定谁该排前面,再用相邻 把数组排整齐。完成四个小任务:选出 ,走一遍 3, 1, 2,再认识 和 。这里不会在浏览器里运行 C++。
任务 1:比较规则决定谁排前面
要把 3, 1, 2 变成 1, 2, 3。先判断该用 :相邻比较,大的往后换。再判断谁该排前面,看的是 。点不认识的词可看基础解释。
必会:能比较两个整数,能说出“更小的应排在前面”。这里不会在浏览器里运行 C++,只练习选择。
3, 1, 2 该怎么变整齐?冒泡思想 · 必会
两个数谁该排前面?比较规则 · 必会
任务 2:走一遍 3, 1, 2
最小示例:int a[3] = {3, 1, 2}; 相邻比较,大的用 往后挪。按顺序点三步。这里不会在浏览器里运行 C++。
必会:能把小数排成从小到大。边界:只比较不相邻的 3 和 2,会漏掉中间的 1;要先比 a[0] 和 a[1]。
- int a[3] = {3, 1, 2};
- if (a[0] > a[1]) swap(a[0], a[1]); // 得到 1, 3, 2
- if (a[1] > a[2]) swap(a[1], a[2]); // 得到 1, 2, 3
- // 现在已经从小到大
对照走完了,现在亲手把这个交换敲出来。相邻两格比出大小后,用 把大的那个往后挪。下面是只读脚手架,只留一空给你敲键盘。
- int a[3] = {3, 1, 2};
- if (a[0] > a[1]) ; // 得到 1, 3, 2
- if (a[1] > a[2]) swap(a[1], a[2]); // 得到 1, 2, 3
- // 现在已经从小到大
if (a[0] > a[1]) swap(a[0], a[1]); // 大的 3 往后挪
任务 3:sort 和相同元素
建议掌握:整数数组可以直接 sort(a, a + n)。相同分数要检查 :原来在前的还在不在前。
必会 / 建议掌握 / 拓展:必会是相邻比较和交换。sort 和检查相同元素是建议掌握。快排、堆排、lambda 比较器和稳定性证明是拓展,现在不用当硬门槛。规模:n 大约 1000 时,相邻交换大约 n² 次(约一百万次)通常能过 CSP-J 1 秒;n 到 1e5 就要换更快的 sort。
- int a[5] = {5, 2, 5, 1, 2};
- sort(a, a + n); // 默认从小到大
- // 两个 5:稳定排序会保持原来的先后
- // lambda 比较器是拓展,现在不必会
先选出整数数组该怎么排:
再选出两个 90 分该怎么检查:
任务 4:随机小测,看看你是否真的懂了
每次从本课题库抽出三道不同的选择题。题目与解析已通过校验,答完后看解析,不要只看分数;拿不准就回到对应任务再看一遍。