qsort()排序
一 、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<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");
}
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;
}
运行结果为: