PS: 之前给新生们写的。在这里也发一下吧。
====================================================================================
【整数数组】直接从小到大排序
#include<algorithm> #include<cstdio> using namespace std; //输入: // 先输入数组长度 n // 然后再输入n个整数 //输出 // 从小到大顺序输出数组 int main(){ int i,n,a[200]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(i=0;i<n;i++) printf("%d\n",a[i]); return 0; }
======================================================================================
【整数数组】从小到大排序
#include<algorithm> #include<cstdio> using namespace std; //输入: // 先输入数组长度 n // 然后再输入n个整数 //输出 // 从小到大顺序输出数组 int cmp(int x,int y){ return x<y; } int main(){ int i,n,a[200]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n,cmp); for(i=0;i<n;i++) printf("%d ",a[i]); puts(""); return 0; }
==================================================================================
【整数数组】从大到小排序
#include<algorithm> #include<cstdio> using namespace std; //输入: // 先输入数组长度 n // 然后再输入n个整数 //输出 // 从大到小顺序输出数组 int cmp(int x,int y){ return x>y; } int main(){ int i,n,a[200]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n,cmp); for(i=0;i<n;i++) printf("%d ",a[i]); puts(""); return 0; }
======================================================================================
【结构体数组】简单排序
#include<algorithm> #include<cstdio> using namespace std; //输入: // 先输入结构体数组长度 n // 然后再输入n个整数,表示结构体的其中的一个属性q //输出 // 根据结构体数组的属性q的从大到小顺序,输出结构体数组 struct S{ int q; int b; }a[200]; int cmp(S x,S y){ return x.q>y.q; } int main(){ int i,n; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i].q); a[i].b=i; } sort(a,a+n,cmp); for(i=0;i<n;i++) printf("%d 原位置:%d\n",a[i].q,a[i].b); puts(""); return 0; }
==============================================================================
【结构体数组】双属性排序
#include<algorithm> #include<cstdio> using namespace std; //输入: // 先输入结构体数组长度 n // 然后接下去n行,每行输入两个整数,表示结构体的其中的两个属性p和q //输出 // 根据p属性的大小进行从大到小排序,在p相等的情况下,则根据q的大小进行从大到小排序 /* 样例输入: 5 3 5 4 7 6 3 4 9 3 2 */ struct S{ int q; int p; }a[200]; int cmp(S x,S y){ if(x.p==y.p) return x.q>y.q; return x.p>y.p; } int main(){ int i,n; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&a[i].p,&a[i].q); sort(a,a+n,cmp); puts("排序后:"); for(i=0;i<n;i++) printf("%d %d\n",a[i].p,a[i].q); puts(""); return 0; }
==============================================================================
【结构体数组】双属性排序2 // 所有的结构体排序都可以把以上的cmp函数,写成结构体运算符重载operator<
#include<algorithm> #include<cstdio> using namespace std; //输入: // 先输入结构体数组长度 n // 然后接下去n行,每行输入两个整数,表示结构体的其中的两个属性p和q //输出 // 根据p属性的大小进行从大到小排序,在p相等的情况下,则根据q的大小进行从大到小排序 /* 样例输入: 5 3 5 4 7 6 3 4 9 3 2 */ struct S{ int q; int p; bool friend operator <(S a,S b){ if(a.p==b.p) return a.q>b.q; return a.p>b.p; } }a[200]; int main(){ int i,n; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&a[i].p,&a[i].q); sort(a,a+n); puts("排序后:"); for(i=0;i<n;i++) printf("%d %d\n",a[i].p,a[i].q); puts(""); return 0; }
=================================================================================================
【字符串数组】排序(char字符串)
#include<algorithm> #include<cstdio> #include<cstring> using namespace std; //输入: // 先输入字符串数组长度 n // 然后再输入n个字符串 //输出 // 从小到大顺序输出字符串数组 char as[200][50]; int cmp(int x,int y){ return strcmp(as[x],as[y])==-1; } int main(){ int i,n,a[200]; scanf("%d",&n); for(i=0;i<n;i++){ // 注意字符串数组as[] 顺序并没有改变,改变的是存储 字符串数组as[] 映射 的数组a[] scanf("%s",as[i]); a[i]=i; } sort(a,a+n,cmp); for(i=0;i<n;i++) printf("%s\n",as[a[i]]); return 0; }
=================================================================================================
【字符串数组】排序(string 字符串)
#include<algorithm> #include<iostream> using namespace std; //输入: // 先输入字符串数组长度 n // 然后再输入n个字符串 //输出 // 从小到大顺序输出字符串数组 string as[100]; int main(){ int i,n,a[200]; scanf("%d",&n); for(i=0;i<n;i++) cin>>as[i]; sort(as,as+n); cout<<"排序后:"<<endl; for(i=0;i<n;i++) cout<<as[i]<<endl; return 0; }