Sort排序

Sort排序

对于下部分代码

#include<bits/stdc++.h>

using namespace std;

{

int arr[]={1,5,6,2,4,3,10};

return 0;

}

sort(arr,arr+7);

可实现数组arr从小到大的排序

sort(arr+i,arr+j);

可实现数组从arr[i]到arr[j-1]的从小到大排序

sort(arr+i,arr+j,greater<int>);

可实现数组从arr[i]到arr[j-1]的从大到小排序

Bool cmp(TypeDate x,TypeDate y)

{

return x<y;   

//可视为判断条件,当为true时x放在y前,当为false时y放在x前

}
sort(arr+i,arr+j,cmp);

可实现数组从arr[i]到arr[j-1]的按自己想要的方式排序

例题一:

找出班级的总分的第一名

输入样例:

3

Aaa 90 20 40

Bbb 60 60 60

Ccc 80 50 60

输出样例:

Ccc 190

参考代码:

#include<bits/stdc++.h>

using namespace std;

struct Student

{

    string name;

    int score[3];



    Student(){}



    Student(string n,int s1,int s2,int s3)

    {

        name=n;

        score[0]=s1;

        score[1]=s2;

        score[2]=s3;

    }

};

bool cmp(Student s1,Student s2)

{

    int sum1,sum2;

    sum1=s1.score[0]+s1.score[1]+s1.score[2];

    sum2=s2.score[0]+s2.score[1]+s2.score[2];

    return sum1>sum2;



}

int main()

{

    Student stu[10];

    int n,s1,s2,s3;

    string name;



    cin>>n;

    for(int i=0;i<n;i++)

    {

        cin>>name>>s1>>s2>>s3;



        stu[i]=Student(name,s1,s2,s3);



    }



    sort(stu,stu+n,cmp);



cout<<stu[0].name

<<" "<<stu[0].score[0]+stu[0].score[1]+stu[0].score[2];



    return 0;

}

例题二:

我们有N个正整数,均小于10000。现在需要将这些正整数按照除以3的余数从小到大排序,即除以3余O的数排在除以3余1的数前面,除以3余1的数排在除以3余2的数前面。如果余数相等,则按照正整数的值从小到大排序。

参考代码:

#include<bits/stdc++.h>

using namespace std;

bool cmp(int x,int y)

{

    if(x%3!=y%3)

    {

        return x%3<y%3;

    }

    else

        return x<y;

}



int main()

{

    int arr[100],n;

    cin>>n;



    for(int i=0;i<n;i++)

    {

        cin>>arr[i];



    }



    sort(arr,arr+n,cmp);



     for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<" ";



    }



    return 0;

}

例题三:

比较浮点数中的小数点后的数,如果一样。比较整数部分大小。以从小到大的方式排序

参考代码:

#include<bits/stdc++.h>

#define EPS 1e-6

using namespace std;



bool cmp(double a,double b)

{

    double da=fabs(a-round(a));

    double db=fabs(b-round(b));



    if(fabs(da-db)<EPS)

    {

        return a<b;

    }

    else

        return da<db;

}



int main()

{

    double arr[100];

    int n;

    cin>>n;



    for(int i=0;i<n;i++)

    {

        cin>>arr[i];



    }



    sort(arr,arr+n,cmp);



     for(int i=0;i<n;i++)

    {

        cout<<arr[i]<<" ";



    }



    return 0;

}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值