stl sort排序

sort函数包含在头文件#include<algorithm>中,有三种用法

1)对基本类型的数组从小到大排序

sort(数组名+n1,数组名+n2)

将数组中下标为【n1.n)的元素进行排序

eg:a[]={2,4,3,8,6}

              sort(a+1,a+3);//结果为2,3,4,8,6

 

2)对元素类型为T的基本数组类型从大到小排序

sort(数组名+n1,数组名+n2,greater<T>());

 

3)用自定义的排序规则对任何类型为T的数组排序

sort(数组名+n1,数组名+n2,排序规则结构名());

排序规则结构的定义方式:

struct 结构名{

bool operator()(const T &a1,const T & a2){

若a1应该在a2的前面,则返回true,否则返回false;

}

}

程序案例一

        #include<iostream>

#include<algorithm>

using namespacestd;

//排序规则结构定义

struct Rule1{//从大到小排序

      bool operator()(const int &a,const int&b){

            return a>b;

      }    

};

struct Rule2{//按个位数从小到大排序

      bool operator()(const int &a,const int&b){

            return a%10<b%10;

      }    

};

void print(inta[],int size){

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

            cout<<a[i]<<"";

      cout<<endl;

}

int main(){

      int a[]={12,45,3,98,21,7};

      cout<<"原数组为:";

      print(a,sizeof(a)/sizeof(int));

      cout<<endl;

      sort(a,a+sizeof(a)/sizeof(int));//从小到大排序

      cout<<"1)从小到大排序为:" ;

      print(a,sizeof(a)/sizeof(int));

      sort(a,a+sizeof(a)/sizeof(int),Rule1());//从大到小排序

      cout<<"2)从大到小排序为:";

      print(a,sizeof(a)/sizeof(int)) ;

      cout<<"3)个位数从小到大排序为:";

      sort(a,a+sizeof(a)/sizeof(int),Rule2());

      print(a,sizeof(a)/sizeof(int));

      system("pause");

      return 0;

}

程序案例二:(对结构体数组进行排序进行排序)

#include<iostream>

#include<algorithm>

#include<string.h>

using namespace std;

struct student{

      char name[20];

      int num;

      double gpa;

};

student stu[]={

{"Jack",112,3.4},{"Mary",102,3.8},{"Ala",333,3.5},{"Zero",101,4.0}

};

struct byName{//按姓名从小到大排

      bool operator()(conststudent & A,const student &B){

            if(strcmp(A.name,B.name)<0)

                  return true;

            return false;

      }

};

struct byNum{//按学号从小到大排

      bool operator()(conststudent &A,const student &B){

            return A.num<B.num;

      }

};

struct byGpa{//按绩点从高到低排

      bool operator()(conststudent &A,const student &B){

            return A.gpa>B.gpa;

      }

};

void print(student stu[],int size){

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

            cout<<"("<<stu[i].name<<","<<stu[i].num<<","<<stu[i].gpa<<")";

      cout<<endl;

}

int main(){

      intn=sizeof(stu)/sizeof(student);

      cout<<"原数据为:";

      print(stu,n);

      cout<<endl;

      sort(stu,stu+n,byName());

      cout<<"按姓名排序为:";

      print(stu,n);

      sort(stu,stu+n,byNum());

      cout<<"按学号排序为:";

      print(stu,n) ;

      sort(stu,stu+n,byGpa());

      cout<<"按绩点排序为:";

      print(stu,n);

      system("pause");

      return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值