📝 核心代码模板速查
模板1:从大到小排序(降序)
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int zuo, int you) {
return zuo > you; // 左边比右边大?大就排前面
}
int main() {
int a[5] = {2, 6, 3, 8, 1};
sort(a, a+5, cmp); // 输出:8 6 3 2 1
return 0;
}
模板2:奇偶分段(奇数在前,同组从小到大)
bool cmp(int zuo, int you) {
if (zuo % 2 != you % 2) { // 奇偶性不同
return zuo % 2 > you % 2; // 奇数(1)排前面
}
return zuo < you; // 奇偶相同,按大小升序
}
// 数组{5,1,4,1,2,3,7} → {1,1,3,5,7,2,4}
模板3:多条件排序(先按个位升序,个位相同按整体降序)
bool cmp(int zuo, int you) {
if (zuo % 10 != you % 10) { // 个位不同
return zuo % 10 < you % 10; // 个位小的在前
}
return zuo > you; // 个位相同,大的在前
}
⚠️ C3-9 高频易错点
① cmp返回值方向:return true表示zuo排在you前面,return false才交换。方向搞反结果就反了!
② 降序只改一个符号:升序return zuo < you,降序return zuo > you。不要写成别的表达式。
③ 奇偶分段原理:zuo%2 > you%2中,奇数%2=1、偶数%2=0,1>0为true所以奇数排前面。别搞反!
④ 多条件排序先if后return:先判断第一关键字是否不同,不同就return第一关键字结果;相同才return第二关键字。
⑤ 区间排序右边界:sort左闭右开!sort(a+l, a+r+1)才是排[l,r]闭区间。写成a+r会漏掉最后一个。
⑥ cmp参数类型要对应:排int数组用int参数,排char数组用char参数,别用错类型。
⑦ sort头文件:使用sort必须#include <algorithm>,不写会编译报错!