qsort小总结
qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下 qsort(s,n,sizeof(s[0]),cmp); 其中第一个参数是参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写&s[i] 这样的表达式,这个问题下面有说明); 第二个参数是参与排序的元素个数; 第三个三数是 单个元素的大小,推荐使用sizeof(s[0])这样的表达式,下面也有说明 :) ;第四个参数就是 很多人觉得非常困惑的比较函数啦,关于这个函数,还要说的比较麻烦... 我们来讨论cmp这个比较函数(写成cmp是我的个人喜好,你可以随便写成什么,比如qcmp什么 的).典型的cmp的定义是 int cmp(const void *a,const void *b); /* #include <cstdio> #include <cstring> #include <cstdlib> int s[10000],n,i; int cmp(const void *a, const void *b) { return (*(int *)a-*(int *)b);/// 正的就是从小到大排 负的就是从大到小排 } int main() { scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&s[i]); qsort(s,n,sizeof(s[0]),cmp); for(i=0;i<n;i++) printf("%d ",s[i]); return(0); } */ /* #include <cstdio> #include <cstdlib> struct node { double date1; int no; } s[100]; int i,n; int cmp(const void *a,const void *b) { ///struct node *aa=(node *)a; ///struct node *bb=(node *)b; ///return(((aa->date1)>(bb->date1))?1:-1); return ((node*)a)->date1 - ((node*)b)->date1; } int main() { scanf("%d",&n); for(i=0;i<n;i++) { s[i].no=i+1; scanf("%lf",&s[i].date1); } qsort(s,n,sizeof(s[0]),cmp); for(i=0;i<n;i++) printf("%d %lf\n",s[i].no,s[i].date1); return(0); } */ ///No.6.对结构体排序.加入no来使其稳定(即data值相等的情况下按原来的顺序排) /* #include <stdio.h> #include <stdlib.h> struct node { double date1; int no; } s[100]; int i,n; int cmp(const void *a,const void *b) { ///struct node *aa=(node *)a; ///struct node *bb=(node *)b; ///if(aa->date1!=bb->date1) ///return(((aa->date1)>(bb->date1))?1:-1); if(((node*)a)->date1!=((node*)b)->date1) return(((((node*)a)->date1)>(((node*)b)->date1))?1:-1); else return((((node*)a)->no)-(((node*)b)->no)); } int main() { scanf("%d",&n); for(i=0;i<n;i++) { s[i].no=i+1; scanf("%lf",&s[i].date1); } qsort(s,n,sizeof(s[0]),cmp); for(i=0;i<n;i++) printf("%d %lf\n",s[i].no,s[i].date1); return(0); } */ /* 5 1.1 2.2 1.1 3.3 0.0 5 0.000000 1 1.100000 3 1.100000 2 2.200000 4 3.300000 Process returned 0 (0x0) execution time : 19.668 s Press any key to continue. */ ///对字符串数组的排序(char s[][]型) /* #include <stdio.h> #include <string.h> #include <stdlib.h> char s[100][100]; int i,n; int cmp(const void *a,const void *b) { return(strcmp((char*)a,(char*)b)); } int main() { scanf("%d",&n); for(i=0;i<n;i++) scanf("%s",s[i]); qsort(s,n,sizeof(s[0]),cmp); for(i=0;i<n;i++) printf("%s\n",s[i]); return(0); } ///对字符串数组排序(char *s[]型) #include <stdio.h> #include <string.h> #include <stdlib.h> char *s[100]; int i,n; int cmp(const void *a,const void *b) { return(strcmp(*(char**)a,*(char**)b)); } int main() { scanf("%d",&n); for(i=0;i<n;i++) { s[i]=(char*)malloc(sizeof(char*)); scanf("%s",s[i]); } qsort(s,n,sizeof(s[0]),cmp); for(i=0;i<n;i++) printf("%s\n",s[i]); return(0); } */
很久以前从csdn上粘下来的,不记得原作者是谁了。