一 、qsort()的四个参数。
头文件:c:<string.h>
一)、 1 待排序数组首地址2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针
二)、 对int类型数组排序
int num[100];
Sample: int cmp ( const void *a , constvoid*b )
{ return *(int *)a - *(int *)b; }
qsort(num,100,sizeof(num[0]),cmp);
三)、对char类型数组排序(同int类型)
char word[100];
Sample: int cmp( const void *a , const void*b)
{ return *(char *)a - *(int *)b; }
qsort(word,100,sizeof(word[0]),cmp);
四)、对double类型数组排序(特别要注意)
double in[100];
int cmp( const void *a , const void *b )
{ return *(double *)a > *(double *)b ?1: -1; }
qsort(in,100,sizeof(in[0]),cmp);
五)、qsort只针对某一行进行排序,其他行不进行改变
参照水题抛硬币的题解:
#include<stdio.h> #include<stdlib.h> #include<string.h> double a[15][105]; int cmp(const void*a,const void *b){ return *(double*)a-*(double*)b; } int main(){ int n,m; while(~scanf("%d %d",&n,&m)){ if(n==0&&m==0)break; double s=0; double p; memset(a,0,sizeof(a)); for(int i=0;i<n;i++){ for(int j=0;j<m;j++) scanf("%lf",&a[j][i]); } for(int i=0;i<m;i++){ for(int j=0;j<n;j++) printf("%lf ",a[i][j]); printf("\n"); } for(int i=0;i<m;i++){ qsort(a[i],n,sizeof(a[i][0]),cmp); } for(int i=0;i<m;i++){ for(int j=0;j<n;j++) printf("%lf ",a[i][j]); printf("\n"); } for(int i=0;i<n;i++){ p=1; for(int j=0;j<m;j++){ p=p*a[j][i]; } s=s+p; } printf("%.4lf\n",s); } return 0; } 结果为:
六)、qsort关于一个列进行整体排序
例如只针对二维数组的第一列进行排序
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int cmp(const void *a, const void *b) { int *c = (int *)a; int *d = (int *)b; if (*c != *d) return *c - *d; return *(d + 1) - *(c + 1); } int main() { int i, j,n,m; int a[105][15]; while(scanf("%d %d",&n,&m)){ for(i=0;i<n;i++){ for(j=0;j<m;j++) scanf("%d",&a[i][j]); } qsort(a, n, sizeof(a[0]), cmp); for (i = 0; i<n; i++) { for (j = 0; j<m; j++) printf("%d ", a[i][j]); printf("\n"); } system("pause"); } return 0; }
运行结果为:
