qsort函数是一种回调函数,是基于快速排序的算法,可以实现排序。
这里先看一下qsort函数的参数
void qsort(void* base, size_t num, size_t size,int(*compar)(const void*, const void*));
第一个参数是传要排列的数组;
第二个参数是数组中元素的个数;
第三个是数组中每个元素的长度;
最后一个参数是一个函数指针,指向一个比较函数。
说明:函数名和&函数名都是指向函数的地址,所以在qsort函数中,最后一个参数可以是比较函数名,也可以是&函数名。
在代码中我使用的是&函数名。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//CmpInt 是 qsort 的比较函数
//调用时机不是由程序员自己决定的
//而是由 qsort 内部来决定的
//像这种风格的函数就叫“回调函数”
int CmpInt(void* p1, void* p2)
{
int* a = (int*)p1;
int* b = (int*)p2;
//如果*a < *b,函数返回真,否则返回假。
//p1和p2,如果希望p2指向的元素在p1的前面,返回真。
return *a < *b;
}
int main()
{
int arr[] = { 9, 5, 2, 7 };
int sz = sizeof(arr) / sizeof(arr[0]);
//qsort是基于快速排序的算法
//void qsort(void* base, size_t num, size_t size,int(*compar)(const void*, const void*));
qsort(arr, sz, sizeof(arr[0]), &CmpInt);
for (int i = 0; i < sz; i++)
{
printf("%d\n", arr[i]);
}
system("pause");
return 0;
}
这里实现的是一个升序,如果想要实现降序,只需把比较函数中的return 改为*a > *b即可。