C语言函数qsort的使用方法
qsort函数stdlib.h文件中,函数原型为
void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));
*base 为要排序的数组
nelem 为要排序的数组的长度
width 为数组元素的大小(一字节为单位)
默认是从小到大排序的!
(* Comp)(const void *p1,const void *p2) 为判断大小函数的指针,这个函数需要自己定义,如果p1>p2,函数返回-1;a<b,函数返回1;a==b函数返回0
操作方法
- 01
对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp);
- 02
对double类型数组排序 int Mycmp(const void *a ,const void * b) { return (*(double *)a>*(double * )b?1:-1); }
- 03
结构体一级排序 struct ln{ double data; int x; int y; }; int Mycmp2(const void *a ,const void * b) { return (((ln *)a)->data>((ln *)b)->data?1:-1); }
- 04
对结构体二级排序 struct ln{ int x; int y; }; 对x按升序排列,如果x相同,则y按降序排列 int Mycmp1(const void *a ,const void * b) { return (((ln *)a)->data>((ln *)b)->data?1:-1); } //升序 int Mycmp2(const void *a ,const void * b) { if(((ln *)a)->data==((ln *)b)->data) return (((ln *)a)->x>((ln *)b)->x?-1:1); }//降序 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); }
- 05
对字符串进行排序 int Mycmp3(const void *a ,const void * b) { return strcmp(((ln *)a)->str,((ln *)b)->str); }
- 06
对字符串二维数组排序完整代码 #include <stdio.h> #include <stdlib.h> #include <string.h> char s[2001][1001]; int cmp(const void *a, const void *b){ return strcmp((char *)a,(char *)b); } int main(){ int i,n; scanf("%d",&n); getchar(); for(i=0;i<n;i++) gets(s[i]); qsort(s,n,1001*sizeof(char),cmp); for(i=0;i<n;i++) puts(s[i]); return 0; }