哈喽啊大家晚上好!
今天给大家带来的知识是——库函数qsort。首先,给大家介绍一下qsort函数, qsort函数是C标准库中的一种排序函数,用于对数组中的元素进行快速排序。它接受四个参数:待排序数组的基地址,数组中元素的个数,每个元素的大小,以及一个函数指针,该函数指定了比较两个元素的规则。qsort将按照指定的规则对数组进行排序,并在排序完成后返回排序后的数组。
想必大家还记得之前我给大家讲过一道C语言中的经典题目——起泡排序法(又叫冒泡排序法),之前我在给大家讲这道题目时是使用了for循环嵌套来实现的,但是今天我们知道了qsort函数,我们就可以使用此函数来实现起泡排序法,会更加的简洁。下面我先给大家说说如何使用qsort函 数,qsort函数用于对数组进行快速排序。它的原型如下:
void qsort(void* base, size_t num, size_t size, int (*compare)(const void*, const void*));
其中:
- base是要排序的数组的指针;
- num是数组中元素的个数;
- size是每个元素的大小(以字节为单位);
- compare是一个指向函数的指针(简称函数指针),用于比较两个元素的大小关系。
使用qsort函数首先需要定义一个比较函数,它的返回值是一个整数:
int compare(const void* a, const void* b) {
// 比较的逻辑,返回一个整数
}
比较函数的参数类型为const void*,也就是指向任意类型数据的指针,因此在函数内部需要先将指针转换为对应类型的指针,然后再进行比较。
下面我给大家举一个例子,方便大家更好的认识怎么使用qsort函数,例如:使用qsort函数排序一个整形数组,代码如下:
#include <stdio.h>
//qosrt函数的使⽤者得实现⼀个⽐较函数
int int_cmp(const void * p1, const void * p2)
{
return (*( int *)p1 - *(int *) p2);
}
int main()
{
int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
int i = 0;
qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);
for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)
{
printf( "%d ", arr[i]);
}
printf("\n");
return 0;
}
其中,在比较函数中,如果p1-p2大于0的话则进行数组中的两个数的比较和排序(升序),如果想降序输出的话,把return语句中的p1,p2进行交换即可。
好啦,那么到此想必大家也了解怎么使用qsort函数了,那现在我们就用qsort函数来优化起泡排序法吧,如下:
```
#include <stdio.h>
#include <stdlib.h>
// 比较函数
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int main() {
int arr[] = {3, 1, 5, 2, 4};
int n = sizeof(arr) / sizeof(arr[0]);
// 使用qsort函数进行排序
qsort(arr, n, sizeof(int), compare);
// 输出排序后的结果
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这里呢跟上面的排序整形数组是差不多的,但需要注意,我们在使用qsort函数时需要引用头文件
#include<stdlib.h>,不然编译器会报警告哦!
那么,今天的知识分享就到此结束啦,感谢大家支持,大家明天见啦!