C++的内置函数 sort() 支持数组的局部排序。例如 int a={10,9,8,7,6,5,4,3,2,1},可以用 sort(a,a+5),排序成 {6,7,8,9,10,5,4,3,2,1}。( )
这题考C++标准库sort的区间排序特性。拿到题先想:sort的第二个参数是开区间,a+5意味着只排前5个元素,从下标0到4,正好对应数组前段升序。
最容易栽跟头的就是不懂sort的参数是左闭右开区间[begin, end),误以为a+5包含了下标5那个元素,或者觉得sort默认只能排整个数组。还有学生看到结果变了就乱猜,没意识到只是局部变了,后面没动。
C++标准库算法(algorithm模块)中sort函数的区间排序能力。这是GESP四级开始重点考察的库函数行为边界,不再只考纯语法。
C++中sort(first, last)对的是左闭右开区间[first, last),即包含first但不包含last。这是C++算法库的通用约定,和reverse、next_permutation等函数一致。
命题人特意选这个例子,就是要卡住那些只背“sort能排序”却不知其参数语义的考生。四级不再考纯语法,开始考对库函数行为边界的理解。如果考生以为sort(a, a+5)会排6个元素,或者以为只能排整个数组,就会掉进坑里。
看到sort(a, a+5)先锁定调用约定:右边界是开区间。a+5对应下标5,即处理下标0-4共5个元素。原数组前5个正好是10,9,8,7,6,升序后变6,7,8,9,10,与题干结果完全一致。通法:任何sort(ptr, ptr+n)都等价于“排前n个”——这是C++算法库的通用调用模式,以后见sort/reverse/next_permutation等函数都要按这个思路拆解。
错误选项B的诱惑在于“sort不是排整个数组吗?”——命题人借这道题检验你是否清楚区间语义:右边界是排他的,只排到a+5前。绝对化表述“只能排整个数组”是典型认知偏差,一旦陷入就会选错。还要注意,局部排序后数组其余部分保持原样,题干中后5个元素没动,这也是验证区间正确的关键细节。
排序基础在题库共考过249题,覆盖9个考试级别(2008-2026);逐年分布:2008年2题、2009年3题、2010年3题、2011年1题、2012年2题、2013年1题、2014年2题、2015年1题、2017年2题、2018年1题、2019年1题、2020年2题、2021年3题、2022年5题、2023年22题、2024年51题、2025年57题、2026年50题、null年40题;分赛事:GESP五级74题、CSP入门级44题、GESP四级39题、GESP八级27题、GESP七级26题、GESP六级12题、NOIP提高组初赛12题、CSP提高级9题、NOIP普及组初赛6题。
基于给定数据与经验预测未来可能怎么考;若数据不足以支撑,明确写“暂无足够依据预测”,绝不硬编。 暂无足够依据预测。