排序是程序设计应用最广泛的算法之一,所以学好排序的重要性,你懂的!
关于排序自己会用的不多,先在这里做个小结!
首先,sort函数可以对数组和结构体进行排序,还是用实例说话吧!一句话,都在代码里!
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(int i,int j)
{
return (i>j);
}
int main()
{
int num[]={5,2,9,7,1,6,4,8,3};
vector<int>data(num,num+9);
vector<int>::iterator it;
int i;
cout<<"原始数据:"<<endl;
for(i=0;i<9;i++)
{
cout<<num[i]<<" ";
}
cout<<endl;
cout<<"对前四个数排序:"<<endl;
sort(num,num+4);// 2 5 7 9 1 6 4 8 3
for(i=0;i<9;i++)
{
cout<<num[i]<<" ";
}
cout<<endl;
cout<<"按从大到小排列输出:"<<endl;
sort(data.begin(),data.end(),cmp);
for(it=data.begin();it!=data.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
有时,我们进行的排序所依据的因素有多个,比如我们在对acm竞赛人员的成绩进行排名时,往往先依据他们的解答出来的题目数,如果题目数相同了,我们就会依据他们所用的时间来进行排名,这时往往会涉及结构体的二级排序,下面介绍结构体的一级和二级排序!
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int num;
int age;
}example[5];
bool cmp(node a,node b)
{
return a.num>b.num;
}
bool cmp2(node a,node b)
{
if(a.num!=b.num)
return a.num>b.num;
else
return a.age<b.age;
}
int main()
{
int i;
for(i=0;i<5;i++)
{
cin>>example[i].num>>example[i].age;
}
sort(example,example+5,cmp);
cout<<"---after sorting by cmp---"<<endl;
for(i=0;i<5;i++)
{
cout<<example[i].num<<" "<<example[i].age<<endl;
}
sort(example,example+5,cmp2);
cout<<"---after sorting by cmp2---"<<endl;
for(i=0;i<5;i++)
{
cout<<example[i].num<<" "<<example[i].age<<endl;
}
return 0;
}