目录
1.qsort函数是什么
qsort函数是C语言编译器函数库自带的快速排序函数。
其包含在#include<stdlib.h>
头文件里面,所以在使用的时候需要加上该头文件。
// "quick sort"基于快速排序的函数
2.qsort函数的时间复杂度
因为其本身还是快速排序,所以时间复杂度仍然是O(nlogn)
(在做题的时候,感觉它还是比传统的快排要更快,传统的快排最后三个会TLE,但是使用qsort函数就不会)
3.qsort函数具体讲解
sqort函数对数组进行排序
void qsort(void *base, size_t nitems, size_t size, int (*compare)(const void *, const void*))
参数说明:
/*
base – 指向要排序的数组的第一个元素的指针。
nitems – 由 base 指向的数组中元素的个数。
size – 数组中每个元素的大小,以字节为单位。
compare – 用来比较两个元素的函数。
*/compare函数:
int compare(const void *a,const void *b) { return *(int*)a-*(int*)b; }
(int *)a表示将a地址强制类型转换成整形地址类型 *(int*)a 就是得到目标地址的值
//compare函数需要自己定义声明,用来比较a和b的大小。
该函数是一个比较函数,接受两个指针类型的参数
a
和b
,这两个参数分别指向待比较的整数。函数内部通过将指针转换为整型指针,然后取值进行比较,返回它们的差值作为比较结果。
- 如果返回值小于 0,表示
a
应该排在b
的前面。- 如果返回值等于 0,表示
a
和b
相等,顺序不变。- 如果返回值大于 0,表示
a
应该排在b
的后面。
4.qsort 具体案例讲解
//1.对整数排序
#include<stdio.h>
#include<stdlib.h>
#define MAXN 100010
int n,a[MAXN];
//升序排序
int compare1(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
//降序排序
int compare2(const void *a,const void *b)
{
return *(int*)b-*(int*)a;
}
int main()
{
printf("请输入所要排列数组的长度:\n.");
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(int),compare1);
//
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}