先导:
一些重载用法
1.奇偶排序(奇数在偶数前面且要求各自从小到大)
#include<stdio.h>
#include<stdlib.h>
#define re return
int cmp(const void *a,const void *b)
{
int c=*(int *)a,d=*(int *)b;
if((c&1)&&(!(d&1)))re -1;
else if((!(c&1))&&(d&1))re 1;
return c-d;
}
int main()
{
int a[15];
printf("Input 10 numbers:\n");
for(int i=1;i<=10;i++)scanf("%d",a+i);
qsort(a+1,10,sizeof(a[0]),cmp);
printf("Output: " );
for(int i=1;i<=9;i++)
printf("%d,",a[i]);
printf("%d\n",a[10]);
return 0;
}
2.结构体快排
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node{
char name[100];
int gold;
}cou[15];
int cmp(const void *a,const void *b)
{
struct node *x=(struct node *)a;
struct node *y=(struct node *)b;
int f=strcmp(x->name,y->name);
if(!f)return x->gold - y->gold;
else return f;
}
int main()
{
freopen("in.txt","r",stdin);
int n=10;
for(int i=1;i<=n;i++) scanf("%s%d",cou[i].name,&cou[i].gold);
qsort(cou+1,10,sizeof(cou[0]),cmp);
for(int i=1;i<=n;i++)printf("%s %d\n",cou[i].name,cou[i].gold);
}