qsort在 #include<stdlib.h>头函数下
qsort (数组名,数组长度,数组单位长度,排序方式要用一个到函数返回值);
例如:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int s[10000],n,i;
int cmp(constvoid *a, const void *b)
{
return(*(int *)a-*(int *)b);/*这里的(int *)a定义了一个指向int型的指针,注意int *两边的括号不能少,然后(int *)a前面加上*就表示取其指向的值。这里返回的是*(int *)a-*(int *)b,两个数相减的顺序跟函数形参顺序一样这样就会将数组按升序排序,反之如果是return(*(int *)b-*(int *)a),就会将数组按降序排列*/
}
void main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&s[i]);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++)
printf("%d\n",s[i]);
}
qsort常用于多级排序:
例如:
#include <stdio.h>
#include <stdlib.h>
struct node
{
double date;
int flag;
} s[100];
int i,n;
int cmp(constvoid *a,const void *b)
{
return(((struct node *)a)->date > ((struct node *)b)->date?1:-1);/*注意,这里的struct node*跟前面的int*,double*原理一样,都是一种指针类型,这里是自己定义的一个指向结构体的指针类型,故写法为struct 结构体名称 *,这里date是double型数据,故不可能有相等情况出现,只需返回1和-1即可*/
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
s[i].flag=i+1;
scanf("%lf",&s[i].date);
}
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++)
printf("%d %lf\n",s[i].flag,s[i].date);
}