C++之sort函数
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。
愿你出走半生,归来仍是少年