C语言——快速排序qsort()库函数的运用以及模拟实现

目录

⚽️🏀库函数qsort的使用方法🏀⚽️

🌈qsort()库函数使用例子代码🌈

🐠 🐟  qsort()库函数的模拟实现🐠 🐟 

💦冒泡排序

冒泡排序的代码

 ⚡️冒泡排序二代⚡️

🍀swp函数🍀

🌕完整模拟代码

🥥运行截图


⚽️🏀库函数qsort的使用方法🏀⚽️

🥬🥬我们可以看到qsort()库函数有4个参数:

分别是:1.void*base

  指向排序的数组的第一个对象的指针。为什么是用void* 指针类型来接受呢?因为qsort()设计的时候可以排序多种类型的。但是这个函数的作者并不知道我们使用者需要排序什么类型的数据,传参的是什么类型的指针,void*类型的指针是比较宽容的,可以接收多种类型的指针。

              2.size_t num

       待排序元素的个数

              3.size_t size

每一个元素所占内存空间大小,单位是(字节)

4.int (*cmp )(const void*p1,const void*p2)

这是一个函数指针,指向我们需要调用的函数。这个调用的函数是用来设置比较方法的。为什么要设置比较的方法呢?因为我们每一种类型的比较方法是不一样的。整形(int)类型

我们知道要用 > 、<、 =、来比较,字符串就不可以用我们用 > 、<、 =、来比较了,strcmp()库函数来比较大小;还有一些其他的类型,所以我们要自己设置一个比较函数传参给qsort函数(回调函数的使用)。

p1和p2分别指向两个需要比较的元素。

🌈qsort()库函数使用例子代码🌈

//void qsort (void* base, size_t num,  size_t size,  int (*compar)(const void*, const void*));

//void*base :需要排序元素的首元素地址,用base指针来接收

 //size_t num:待排元素的个数
 
 //size_t size:每个元素所占用空间的大小,单位是字节

 //int(*compar)(const void*,consr void*):函数指针,因为每一种元素的排序方法是不一样的,需一个函数来实现比较,函数的返回类型是int

struct stu
{
	char name[20];
	char sex[20];
	int age;
};
int zx(const void* a, const void* b)//整数比较方法
{
	return (*(int*)a - *(int*)b);
}
int jgtname(const void* a, const void* b)//结构体name比较
{
	return  strcmp(((struct stu*)a)->name, ((struct stu*)b)->name);
}
int jgtage(const void* a, const void* b)
{
	return ((struct stu*)a)->age - ((struct stu*)b)->age;
}


void test1()
{
	printf("排序前:\n");
	int arr[] = { 2,9,5,7,6,8,2,4,4,3 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");

	qsort(arr, sz, sizeof(int), zx);//整形数组排序
	printf("排序后:\n");

	for( i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}
void test2()
{
	struct stu s[] = { { "zhangsa
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

熬夜退役选手337

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

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

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

打赏作者

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

抵扣说明:

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

余额充值