【ACM算法】-- 排序篇 - 自定义快速排序 - 1

在这里插入图片描述
如图:如果想要将,样例输出按照降序输出,即自定义排序规则,该怎么办呢?

答:运用辅助函数,自定义排序规则

声明:
sort() 函数只用 小于 号来定序

代码如下:

#include<bits/stdc++.h>
using namespace std;
bool cmp(int x,int y){//自定义辅助函数,定义我们自己的排序规则
    return x>y;
}
int main(){
    int n;
    int buf[100];
    while(scanf("%d",&n)!=EOF){
        for(int i=0 ;i<n;i++){
            scanf("%d",&buf[i]);
        }
        sort(buf,buf+n,cmp);//将自定义函数传入
        for(int i=0;i<n;i++){
            printf("%d ",buf[i]);
        }
        printf("\n");
    }
    return 0;
}

注:
1>对于 sort() 函数
sort() 函数,只用 ‘<’ 来排序,而且带有辅助函数的 sort() 是在 cmp() 返回 true 的时候会将第一个参数排在第二个参数之前(这个排在之前的意思:从左到右的顺序)
2>对于辅助函数
辅助函数,自定义排序规则,只有在返回 true 的时候,才将 x1 排到 x2 之前
3>推广理解 sort()
前面已经说过,sort() 函数,使用 ‘<’ 来排序,这时候不妨也将 ‘<’ 号也当做一个辅助函数
即:

bool cmp(int x,int y){
    return x<y;
}

这时,只有当其返回 true 的时候才是 升序排列
因为 sort() 只用 ‘<’ 所以,我们可以看成,cmp() 是用来蒙混 小于号的判定的,因为即使是小于号,像上面的那样,也是需要一个 true 的值的时候才会将小的排到大的前面,这时如果 cmp() 代替了上面的函数,也返回给 sort() 一个 true 值,这时候,仅从结果来看,返回了 true 值,sort() 就会认为 x1 < x2 ,这时 x1 就会排在 x2 之前了,而不管 x1 与 x2 谁是真正的大或小,sort() 需要的仅仅只是一个返回结果 true 而不管你的实现过程是什么样子的,这样,就实现了自定义排序规则了

发布了83 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42127861/article/details/89323278