C++中的sort函数可以直接完美地取代Pas中十多行的快排代码,在这里,总结一下sort函数的用法:
首先是不加参数的情况:
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n,a[10000];
scanf("%d",&n);
for (int i=0; i<n; i++) scanf("%d",&a[i]);
sort(a,a+n);
for (int i=0; i<n; i++) printf("%d ",a[i]);
return 0;
}
排序的结果是从小到大的,那么如果需要从大到小的话,就要用上参数了:
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a,int b) {return a>b;};
int main()
{
int n,a[10000];
scanf("%d",&n);
for (int i=0; i<n; i++) scanf("%d",&a[i]);
sort(a,a+n,cmp);
for (int i=0; i<n; i++) printf("%d ",a[i]);
return 0;
}
而且,这个函数还可以实现和快排一样的功能,比方说区间排序,只要将sort的前两位稍作修改就可以了。
还有就是关于有参数的排序,其实方法也是相同的,就将HDU 1234作为例子,贴上代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct node
{
string name,begin,end;
}a[1000];
int cmp1(node a,node b) { return a.begin<b.begin;}
int cmp2(node a,node b) { return a.end>b.end;}
int main()
{
int n,m,i;
cin>>n;
while(n--)
{
cin>>m;
for(i=0;i<m;i++)cin>>a[i].name>>a[i].begin>>a[i].end;
sort(a,a+m,cmp1);
cout<<a[0].name<<' ';
sort(a,a+m,cmp2);
cout<<a[0].name<<endl;
}
return 0;
}
需要注意的是要开算法库和namespace。