【C语言】qsort详细将解

文章详细介绍了C语言标准库中的qsort函数,包括其功能、使用方法和参数解析。qsort用于对数组进行排序,它接受一个比较函数指针来确定元素顺序。文中给出了整形和字符类型的升序与降序排序示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录



一、前言

qsort是C语言自带的快速排序,一般与bsearch查找一起连用.


二、qosort是什么?

  1. 对数组的元素进行排序。

  2. 对数组中由指向的元素进行排序,每个元素字节长,使用该函数确定顺序。

  3. 此函数使用的排序算法通过调用指定的函数来比较元素对,并将指向它们的指针作为参数。

  4. 该函数不返回任何值,但通过重新排序数组的元素(如 所定义)来修改指向的数组的内容.


二、qsort的使用

1、原型

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

无返回值,void。

2、参数

第一参数:指向要排序的数组的第一个对象的指针——首地址
第二参数:数组中由指向的元素数
第三参数:数组中每个元素的大小(以字节为单位)
第四参数:指向比较两个元素的函数的指针——函数指针

3、头文件

#include <stdlib.h>

(1)qsort参数中的函数指针讲解

  1. 原型: int compar (const void* p1, const void* p2);
  2. 返回类型为整形(int),返回值为 1、0、-1(与strcmp返回值一致)
  3. 注意:在使用时const void* p1, const void* p2 需要进行强制转换,才可以使用,否则会报错。如 :对整形数组快排,(int*)p1和(int*)p2。
  4. 要实现升序则通过 return (*e1 -*e2)或 return strcmp(*e1, *e2)
  5. 要实现升序则通过 return (*e2 -*e1)或 return strcmp(*e2, *e1)
  6. 4和5点要强制才能使用

三、使用示例和运行截图

1、整形例子(升序)

#include <stdio.h>
#include <stdlib.h>

int compare(const void* p1, const void* p2)
{
	int* e1 = (int*)p1;
	int* e2 = (int*)p2;
	return (*e2 - *e1);
}

int main()
{
	int arr[10] = { 5,6,2,8,6,7,9,1,4,3 };
	int i = 0;

	qsort(arr, 10, 4, compare);//快排

	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行截图

3、字符例子(降序)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int compare(const void* p1, const void* p2)
{
	char* e1 = (char*)p1;
	char* e2 = (char*)p2;
	return (*e2 - *e1);
}

int main()
{
	char ch[5] = { 'b','e','c','a','d'};
	int i = 0;

	qsort(ch, 5, 1, compare);//快排

	for (i = 0; i < 5; i++)
	{
		printf("%c ", ch[i]);
	}
	return 0;
}

运行截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

甘-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值