【C语言】qsort()函数详解

前言:

作者简介:爱吃大白菜1132

人生格言:纸上得来终觉浅,绝知此事要躬行

 

如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!

 

如果觉得博主文章还不错的话,希望三连支持!

目录

1、qsort概念介绍

2、qsort()函数实现(循序渐进式讲解)

2.1 qsort()函数

2.2 qsort()函数实现过程

 3、小节


1、qsort概念介绍

qsort()函数(quick sort)是八大排序算法中的快速排序,能够排序任意数据类型的数组其中包括整形,浮点型,字符串甚至还有自定义的结构体类型。

2、qsort()函数实现(循序渐进式讲解)

2.1 qsort()函数

qsort()函数函数函数参数:

void qsort 
(void* base //待排序数据的起始地址
 size_t num, //待排序数据的元素个数
 size_t size,//待排序数据中一个元素的大小(单位:字节)
 int (*compar)(const void*,const void*)//比较两个元素大小的函数指针
);

        函数中第一个函数参数(void)的类型非常奇妙,因为待排序数据的元素类型可能是整形、浮点型、字符型、结构体……而void类型就像一个宰相(宰相肚子能撑船)不管你传过来的地址是何类型,我都可以积极的收纳。

        函数中第四个函数参数是最难理解的。对于整形数据我们可以通过大小号来比较,对于字符型数据可以用strcmp来比较,但是,我们遇到结构体就出现了问题,结构体中包含的类型多,我们就需要因材施教。

 int (*compar)(const void*p1,const void*p2)//比较两个元素大小的函数指针
);
返回值含义
return -1p1<p2
return 0p1=p2
return 1p1>p2

2.2 qsort()函数实现过程

观察冒牌排序:

 可得出如下过程:

整形:

//测试qsort()函数功能
int cmp_int(const void* e1, const void* e2)
{
	return  *(int*)e1 - *(int*)e2;
}
void test()
{
	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);//打印排列好的数组
	}
}

int main()
{
	
	test();
	
	return 0;
}

结构体:

struct Stu
{
	char name[20] = {0};
	int age = 0;
};
int cmp_by_name(const void* e1, const void* e2)
{
	return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void test()
{
	struct Stu s[] = { {"zhangsan",10},{"lishi",20}};
	qsort(s, sizeof(s), sizeof(s->name),cmp_by_name);
	printf("%s ", s->name);
}

int main()
{
	
	test();
	
	return 0;
}

 3、小节

        有了qsort()函数能有节省不少时间,后期我会出一起通讯录再详细的介绍qsort()函数的使用。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃大白菜  

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值