C语言中qsort函数的使用(基于函数指针)

提示:仅供参考,如有错误,还望指出。


前言

这里主要说明了qsort()函数的一些基本运用,可能有些具体的函数还没有弄懂。

但愿还有后续(学习永无止境)。


提示:以下是本篇文章正文内容,下面案例可供参考

一、qsort()函数是什么?

qsort()函数的介绍(下面是其参数的介绍)
//qsort()  称为quick sort译为快速排序 
void qsort(
 void* base    //需要改变的基础(也就是需要排序的数组)
 size_t num    //数组中数的个数(无符号数)
 size_t size    //数组中数的类型的字符大小(无符号数)
 int (*compar)(const void*, const void*)  

//调用比较的函数(由于参数的类型为const void*类型,故什么类型都能接收)

//这里也用到了函数参数

 
);

二、对各种类型的数组进行排序

1.用于整形数组的排序

代码及说明如下(示例):

int cmp1(const void *a,const void *b)
{
	//通过对a和b强制转换为(int*)类型,然后再解引用
	//最后得出值来推测是否进行转换(后续的也一样)
	return *((int*)a) - *((int*)b);
}

void test1()
{
	int arr[] = { 10,9,8,7,6,5,4,3,2,1 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp1);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}

2.用于单精度数组的排序

代码及说明如下(示例):

int cmp2(const void* a, const void* b)
{
	//这里需要返回的是int型,而原来是float型故强制转换为int型
	return (int) *(float*)a - *(float*)b;
}

void test2()
{
	float farr[] = { 5.0,4.0,3.0,2.0,1.0 };
	int sz = sizeof(farr) / sizeof(farr[0]);
	qsort(farr, sz, sizeof(farr[0]), cmp2);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%f ", farr[i]);
	}
}

3.用于结构体数组的排序

3.1年龄排序

代码及说明如下(示例):

//这里运用到typedef对结构体类型的重命名(后续也有谈到其用法)
typedef struct Stu
{
	char name[20];
	int age;
}Stu;

int cmp3(const void* a, const void* b)
{
	//未重命名时,应当写成这样
	//return ((struct Stu*)a)->age - ((struct Stu*)b)->age;
	//由于重命名故写成这样也行
	//这里age为int型故直接使用即可
	return ((Stu*)a)->age - ((Stu*)b)->age;
}

void test3()
{
	Stu s[3] = { {"zhang da hai",20},{"shu lan",22},{"gou er",10} };
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp3);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", s[i].age);
		printf("%s ", s[i].name);
		printf("\n");
	}
}

3.2姓名排序

这里对strcmp()库函数的返回值进行了介绍,也是从cplusplus中所得,下面也贴上了网站。

代码及说明如下(示例):

代码段中的cplusplus在此:cplusplus.com - The C++ Resources Network

int cmp4(const void* a, const void* b)
{
	//这里运用到了strcmp()函数通过该函数来对字符串进行比较
    //其返回值也为int型,上述的表格中有说明(cplusplus中可以查到)
	return strcmp( ((Stu*)a)->name, ((Stu*)b)->name );
}

void test4()
{
	Stu s[3] = { {"zhang da hai",20},{"shu lan",22},{"gou er",10} };
	int sz = sizeof(s) / sizeof(s[0]);
	qsort(s, sz, sizeof(s[0]), cmp4);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%s ", s[i].name);
		printf("%d ", s[i].age);
		printf("\n");
	}
}

总结

这里对文章进行总结:相信看到这,大家应该对qsort()库函数也有一定的了解,这里主要突出的知识点也就是函数指针。同时希望这篇文章对大家有帮助。

若觉得自己还是有点不懂那就请看看这个:(作者也才刚学)

36.指针详解(7)(C语言程序设计教程谭浩强 c语言谭浩强视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程 C语言编程项目 C语_哔哩哔哩_bilibili

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值