qsort对结构体进行快速排序,直接上代码如下:
#include<stdio.h>
#include<stdlib.h>
struct item
{
int a;
int b;
int c;
double d;
};
int cmp(const void *a, const void*b)
{
struct item *c = (struct item *)a;
struct item *d = (struct item *)b;
if(c->a != d->a)
return c->a - d->a;
else if(c->b != d->b)
return c->b - d->b;
else if(c->c != d->c)
return c->c - d->c;
else
return c->d < d->d;
}
int main()
{
int n,i,a,b,c;
double d;
struct item m[100];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d%d%lf",&a,&b,&c,&d);
m[i].a = a;
m[i].b = b;
m[i].c = c;
m[i].d = d;
}
qsort(m,n,sizeof(m[0]),cmp);
printf("排序后:\n");
for(i=0;i<n;i++)
printf("%d %d %d %.1lf\n",m[i].a,m[i].b,m[i].c,m[i].d);
system("pause");
return 0;
}
运行结果如下: