首先说一下字符串的排序:
代码(1):
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define MAXN 1000 #define N 100 int cmp(const void *a,const void *b) { return strcmp((char*)a,(char*)b); } int main() { int n; char s[MAXN][N]; cin>>n; for(int i=0;i<n;i++) { scanf("%s",s[i]); int j=0; while(s[i][j]=='0') j++;//除去前导零 strcpy(s[i],s[i]+j); } qsort(s,n,sizeof(s[0]),cmp); for(int i=0;i<n;i++) printf("%s\n",s[i]); return 0; }
代码(2):
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define MAXN 1000 #define N 100 void Sort(char s[][N],int n) { char temp[20]; int i,j,k; for(i=1;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(strcmp(s[k],s[j])>0) k=j; if(k!=i) { strcpy(temp,s[i]); strcpy(s[i],s[k]); strcpy(s[k],temp); } } } int main() { char s[MAXN][N]; int i,j,k,n; cin>>n; for(i=0;i<n;i++) scanf("%s",s[i]); Sort(s,n); for(i=0;i<n;i++) printf("%s\n",s[i]); return 0; }
关于qsort函数的排序,总结如下:
//对int类型数组排序 int num[100]; int cmp(const void *a ,const void *b ) { return *(int *)a-*(int *)b; } qsort(num,100,sizeof(num[0]),cmp); //对double类型数组排序 int Mycmp(const void *a ,const void * b) { return (*(double *)a>*(double * )b?1:-1); } //结构体一级排序 struct ln { double data; int x,y; }; int Mycmp2(const void *a ,const void * b) { return (((ln *)a)->data>((ln *)b)->data?1:-1); } //对结构体二级排序 struct ln { int x; int y; }; //对x按升序排列,如果x相同,则y按降序排列 int Mycmp2(const void *a ,const void * b) { if(((ln *)a)->data==((ln *)b)->data) return (((ln *)a)->x>((ln *)b)->x?-1:1); else return (((ln *)a)->data>((ln *)b)->data?1:-1); }