1、对整型数组排序:
#include<stdio.h>
#include<stdlib.h> //qsort函数在这个头文件中
int cmp(const void *a,const void *b)
{
return *(int*)a-*(int*)b; //a-b:从小到大排序;b-a:从大到小排序
}
int main()
{
int i,a[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
qsort(a,10,sizeof(a[0]),cmp);
for(i=0;i<10;i++)
printf("%d ",a[i]);
puts("");
return 0;
}
2、对字符数组排序:
#include<stdio.h>
#include<string.h> //用求字符串长度函数,计算字符串的真正长度
#include<stdlib.h> //qsort函数在这个头文件中
int cmp(const void *a,const void *b)
{
return *(char*)a-*(char*)b;
}
int main()
{
int m;
char a[30];
gets(a);
m=strlen(a);
qsort(a,m,sizeof(a[0]),cmp);
puts(a);
return 0;
}
3、对double型数组排序:
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return *(double*)a>*(double*)b?1:-1; //或 return *(double*)a-*(double*)b;
}
int main()
{
int i;
double a[10];
for(i=0;i<10;i++)
scanf("%lf",&a[i]);
qsort(a,10,sizeof(a[0]),cmp);
for(i=0;i<10;i++)
printf("%f ",a[i]);
puts("");
return 0;
}
4、对结构体一级排序
struct ss
{
double data;
int b;
}a[10];
int cmp(const void *a,const void *b)
{
return (*(ss*)a).data > (*(ss*)b).data ? 1 : -1; //按照data的值从小到大将结构体排序
}
qsort(a,10,sizeof(a[0]),cmp);
5、对结构体二级排序
struct ss
{
int x;
int y;
}a[10];
int cmp(const void *a,const void *b) //按照x从小到大排序,当x相等时按照y从大到小排序
{
struct ss *c=(ss*)a;
struct ss *d=(ss*)b;
if(c->x != d->x) return c->x - d>x;
else return d->y - c->y;
}
qsort(a,10,sizeof(a[0]),cmp);
6、对字符串进行排序
struct ss
{
int data;
char str[100];
}a[10];
int cmp(const void *a,const void *b) //按照结构体中字符串str的字典顺序排序
{
return strcmp((*(ss*)a)->str,(*ss*)b)->str);
}
qsort(a,10,sizeof(a[0]),cmp);
7、对字符串二维数组排序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char s[100][200];
int cmp(const void *a, const void *b)
{ return strcmp((char *)a,(char *)b); } //对字符串二维数组排序
int main()
{
int i,n;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
gets(s[i]);
qsort(s,n,200*sizeof(char),cmp); //共n个字符串,第个字符串200个字节(1个字符占一个字节)。
for(i=0;i<n;i++)
puts(s[i]);
return 0;
}