qsort函数解析

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即可。

猜你喜欢

转载自blog.csdn.net/Watery________1314/article/details/83715817
今日推荐