今天在准备CCF的时候遇到了一个题目-数字排序问题(题目地址),这个题需要用到sort来进行排序。有时间的读者可以先试着解决这个问题,从解决题目的过程中发现自己对sort函数的掌握程度以便发现不足,这也是笔者走过的路。
以下是笔者初次写的代码。
#include<iostream>
#include<algorithm>//函数头文件
using namespace std;
struct Num
{
public : int n;
public : int num;
public : Num(){num=0;}
};
bool compareByNum(const Num &n1,const Num &n2)
{
if(n1.num==n2.num)
{
return n1.n<n2.n;
}
return n1.num>n2.num;
}
int main()
{
int n;
cin>>n;
int a[n];
int i;
Num nn[10];
for(i=0;i<10;i++)
{
nn[i].n=i;
}
for(i=0;i<n;i++)
{
cin>>a[i];
nn[a[i]].num++;
}
sort(nn,nn+10,compareByNum);
}
下面来看sort函数的用法:
- 对于基本数据类型(int,double之类)的数组进行排序,其函数表达式:
sort(begin,end);//默认升序
实例:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={5,2,3,1,4,6,9,7,8,0};//对a数组进行排序
sort(a,a+10);//采用sort函数解决
for(int i=0;i<10;i++)
{
cout<<a[i]<<" ";
}
}
- 对于自定义类型(struct,class类的)的数组进行排序,其函数表达式为:
sort(begin,end,cmpByXxx)//这里的cmpByXxx是需要程序员自定义的函数,sort会按照你所给的要求进行排序(ps:是不是很人性化);
实例:
#include<iostream>
#include<algorithm>
using namespace std;
struct Student
{
int no;
int score;
public : Student(){}
public : Student(int n,int s)
{
no=n;
score=s;
}
};
bool cmpByScore(const Student & s1,const Student & s2)
{
return s1.score>s2.score;//代表排在前面的分数高
}
void put(Student * s,int n)
{
int i;
for(i=0;i<3;i++)
{
cout<<s[i].no<<" "<<s[i].score<<endl;
}
}
int main()
{
Student s[3];
s[0].no=1;s[0].score=90;
s[1].no=2;s[1].score=95;
s[2].no=1;s[2].score=100;
sort(s,s+3,cmpByScore);
put(s,3);
}
既然是简介,笔者就只说这些了(其实是由于水平有限☺)。