C语言qsort函数的应用(快排函数)
存在于头文件#include <stdlib.h>中
qsort ( a , 3 , sizeof(int) , cmp1 );
( 数组首地址,排序的数量,排序元素的类型,排序方式)
不同的排序方式可以通过修改cmp函数来进行修改
1、对数字数组排序
#include <stdio.h>
#include <stdlib.h>
int cmp1(const void *a,const void *b)//从小到大排序;
{
return *(int*)a-*(int*)b;
}
int cmp2(const void *a,const void *b)//从大到小排序;
{
return *(int*)b-*(int*)a;
}
int main()
{
int a[]={2,1,3};
qsort(a,3,sizeof(int),cmp1);
printf("从小到大排序:%d %d %d\n",a[0],a[1],a[2]);
qsort(a,3,sizeof(int),cmp2);
printf("从大到小排序:%d %d %d\n",a[0],a[1],a[2]);
return 0;
}
输出样例
从小到大排序:1 2 3
从大到小排序:3 2 1
2、对字符数组排序:
#include <stdio.h>
#include <stdlib.h>
int cmp1(const void *a,const void *b)//按字典序从小到大排序;
{
return *(char*)a-*(char*)b;
}
int cmp2(const void *a,const void *b)//按字典序从大到小排序;
{
return *(char*)b-*(char*)a;
}
int main()
{
char a[]={'b','a','c'};
qsort(a,3,sizeof(char),cmp1);
printf("从小到大排序:%c %c %c\n",a[0],a[1],a[2]);
qsort(a,3,sizeof(char),cmp2);
printf("从大到小排序:%c %c %c\n",a[0],a[1],a[2]);
return 0;
}
输出样例
从小到大排序:a b c
从大到小排序:c b a
3、对字符串数组排序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp1(const void *a,const void *b)//按字典序从小到大排序;
{
return strcmp((char*)a,(char*)b);
}
int cmp2(const void *a,const void *b)//按字典序从大到小排序;
{
return strcmp((char*)b,(char*)a);
}
int main()
{
char a[][4]={"abc","acb","cab"};
qsort(a,3,sizeof(a[0]),cmp1);
printf("从小到大排序:%s %s %s\n",a[0],a[1],a[2]);
qsort(a,3,sizeof(a[0]),cmp2);
printf("从大到小排序:%s %s %s\n",a[0],a[1],a[2]);
return 0;
}
输出样例
从小到大排序:abc acb cab
从大到小排序:cab acb abc
4、对结构体数组排序:
#include <stdio.h>
#include <stdlib.h>
struct stu
{
char name[10];
int age;
};
int cmp1(const void *a,const void *b)//按年龄从小到大排序;
{
struct stu *c=(struct stu*)a;
struct stu *d=(struct stu*)b;
return (c->age)-(d->age);
}
int cmp2(const void *a,const void *b)//按年龄从大到小排序;
{
struct stu *c=(struct stu*)a;
struct stu *d=(struct stu*)b;
return (d->age)-(c->age);
}
int main()
{
struct stu a[3]={{"xiaohong",15},{"xiaoming",16},{"xiaogang",14}};
qsort(a,3,sizeof(a[0]),cmp1);
printf("从小到大排序:%s %s %s\n",a[0].name,a[1].name,a[2].name);
qsort(a,3,sizeof(a[0]),cmp2);
printf("从大到小排序:%s %s %s\n",a[0].name,a[1].name,a[2].name);
return 0;
}
输出样例
从小到大排序:xiaogang xiaohong xiaoming
从大到小排序:xiaoming xiaohong xiaogang