n 排序是最常用的预处理技术
n qsort包含在<stdlib.h>头文件中
n 函数根据你给的比较条件进行快速排序
n 排序之后的结果仍然放在原数组中
n 使用qsort函数必须自己写一个比较函数。
一、对整型数组排序
Int main()
{
int a[10]={4,2,7,3,6,1,5};
int i,n=7;
qsort(a, n,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
printf(“%d “,a[i]);
}
int cmp ( const void *a , const void *b )
{
int *c=(int *)a; //(int*)是强制类型转换
Int *d=(int *)b;
return *c-*d;
}
等同于return *(int *)a - *(int *)b;
二、对char类型数组排序(同int类型)
n Int main()
n {
n char str[10]=“gjlfjsder”;
n int i,n;
n n=strlen(str);
n qsort(a, n,sizeof(a[0]),cmp);
n puts(str);
n }
n int cmp ( const void *a , const void *b )
{
char *c=(char *)a; //(char*)是强制类型转换
n char *d=(char *)b;
n return *c-*b;
n }
n
等同于return *(char *)a - *(char *)b;
三、对double类型数组排序(同int类型)
n Int main()
n {
n double a[10]={5, 2.5, 1.3, 3.2};
n int i,n=4;
n qsort(a, n,sizeof(a[0]),cmp);
n for(i=0;i<n;i++)
printf(“%.2f “,a[i]);}
int cmp ( const void *a , const void *b )
{
double *c,*d;
c=(double *)a;
d=(double *)b;
return *c>*d ? 1 : -1; //不是return *c-*d
}
等同于return *(double*)a > *(double *)b ? 1:-1;
四、对结构体数组一级排序
n struct student
{
char name[10];
int score;
}stu[100];
n int cmp( const void *a ,const void *b)
n {
struct student *c, *d;
n c=(struct student *)a;
n d=(struct student *)b;
n return d->score – c->score; //降序
n }
n 调用:qsort(stu, 100, sizeof(stu[0]),cmp)
五、对结构体数组二级排序
按照成绩的值从大到小排序,
成绩相同者按姓名从小到大排序
n struct student
{
char name[10];
int score;
}stu[100];
n int cmp( const void *a ,const void *b)
n {
struct student *c, *d;
n c=(struct student *)a;
n d=(struct student *)b;
n if(d->score!=c->score)
n return d->score – c->score; //降序
n else //成绩相同,按姓名升序
n return strcmp(c->name, d->name);//字符串排序
n }
n 调用:qsort(stu, 100, sizeof(stu[0]),cmp)