qsort函数是C语言编译器函数库自带的快速排序函数
头文件:#include<stdlib.h>
函数原型:
void qsort(
void *base,
size_t nmemb,
size_t size,
int (*compar)(const void *, const void *)
);
参数介绍:
参数base :
指向需要排序元素的起始地址
参数nmemb:
表示起始地址后需要排序元素的个数
参数size:
表示该数组中每个元素的大小(字节数),通常sizeof(int)
参数(*compar)(const void *, const void *) :
为指向比较函数的函数指针,决定了排序的顺序。(默认从小到大)
用法示例:
输入:
第一行输入一个n表示元素的个数
第二行输入n个数,用空隔开
输出:输出n个数从小到大排序的结果
#include <stdio.h>
#include <stdlib.h>
int a[10005];
int cmp(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n, sizeof(int), cmp);
for( int i= 0;i < n; i++ ) {
printf("%d ",a[i]);
}
return 0;
}
运行结果:
函数默认从小到大排序,如果要求从大到小怎么办???
做法:
只需将cmp函数返回值取反即可
int cmp(const void * a, const void * b)
{
return -( *(int*)a - *(int*)b );
}
运行结果:
不仅如此起始sqort()还可以直接在选定的区间以内排序
比如我们实现将a[1]~a[9]之间的元素从小到大排序,只需将qsort()改为
qsort(a+1,n-2, sizeof(int), cmp);
运行结果:
qsort 也适用浮点型数据
#include <stdio.h>
#include <stdlib.h>
float a[10005];
int cmp(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%f",&a[i]);
qsort(a,n, sizeof(float), cmp);
for( int i= 0;i < n; i++ ) {
printf("%f ",a[i]);
}
return 0;
}
运行结果: