首先需要写一个比较的函数comp
注意qsort在c语言中头文件为stdlib.h
#include "stdio.h"
#include "stdlib.h"
int comp(const void *a,const void *b)
{ return *(int*)a-*(int*)b;//上面为ab,这个地方也为ab,即从小到大,如果方向不这样比如ab,ba就是从大到小
}
int main()
{
int a[3],i;
for(i=0;i<3;i++)
scanf("%d",&a[i]);
qsort(a,3,sizeof(int),comp);
for(i=0;i<3;i++)
printf("%d",a[i]);
}//记住排序方式,这个为从小到大(可以看一下a,b顺序,上面ab顺序相同)
如何对单个字母进行快速排序,只需将comp函数改一下
#include <stdio.h>
#include <string.h>
#include "stdlib.h"
int comp(const void *a,const void *b)
{ return *(char*)a-*(char*)b;//
}
int main(int argc, const char * argv[])
{
char a[100];
scanf("%s",a);
qsort(a,strlen(a),sizeof(char),comp);//注意n值必须与字符串长度保持一致
printf("%s",a);
return 0;
}
介绍一下strcmp(这个函数很好哦,可以判断两个字符串是否相等,相等就返回0),其库函数为string.h,作用为两个字符串串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止
下面举个例子说明
#include<string.h>
#include "stdio.h"
int main()
{
char a[100],b[100];
scanf("%s %s",a,b);//比较字符串a和b的大小(根据ASCII码值,返还ASCII差值,a大于b为正,a小于b为负)
printf("%d",strcmp(a, b));
}
二维数组运用qsort排序
1
int cmp(const void * a, const void * b)
{
const char* ca = *(const char* *)a;
const char* cb = *(const char* *)b;
int la = strlen(ca);
int lb = strlen(cb);
if (la == lb)
return strcmp(ca, cb);
else
return la - lb;
}
2
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);//在此只是对[x][2]长度比较
}
3
qsort对结构体进行排序
struct queue
{
int start;
int end;
}a[100];
int comp(const void*a,const void*b)
{
struct queue *c,*d;
c=(struct queue*)a;//强制转化
d=(struct queue*)b;
if(c->end<d->end)
return -1;
else if(c->end>d->end)
return 1;
else
return 0;
}
然后再在主函数中运用qsort
qsort(a, n,sizeof(structqueue),comp);