qsort库函数的使用

目录

1.认识qsort函数

2.qsort 排序整型数据

3.qsort排序字符型数据

4.qsort排序浮点型数据、

5.qsort排序结构体数据

6.总结


1.认识qsort函数

 注:以上信息来源于cplusplus官网

 翻译以上信息如下:

 qsort函数是c语言标准库中基于快速排序算法实现的一种对数组进行排序的函数,它可以排序任意数据类型。十分简单方便。

//练习使用库函数,qsort排序各种类型的数据
//void qsort (void* base, size_t num, size_t size,int (*compar)(const void*, const void*));

qsort函数参数如上:


2.qsort 排序整型数据

#include<stdio.h>
#include<stdlib.h>
int compar_int(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}
int main()
{
	int arr1[10] = { 8,9,7,6,5,2,3,1,4,10 };
	int sz1 = sizeof(arr1) / sizeof(arr1[0]);
	printf("排序前的顺序为:\n");
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
	qsort(arr1, sz1, sizeof(arr1[0]), compar_int);
	printf("\n排序后的顺序为:\n");
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}

	return 0;
}

3.qsort排序字符型数据

#include<stdio.h>
#include<stdlib.h>
int compar_char(const void* e1, const void* e2)
{
	return *(char*)e1 - *(char*)e2;
}
int main()
{
	char arr2[5] = { 'e','d','c','b','a' };
	int sz1 = sizeof(arr2) / sizeof(arr2[0]);
	printf("排序前的顺序为:\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%c ", arr2[i]);
	}
	qsort(arr2, sz1, sizeof(arr2[0]), compar_char);
	printf("\n排序后的顺序为:\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%c ", arr2[i]);
	}

	return 0;
}

4.qsort排序浮点型数据、

#include<stdio.h>
#include<stdlib.h>
int  compar_float(const void* e1, const void* e2)
{
	return *(float*)e1 - *(float*)e2;
}
int main()
{
	float arr3[5] = { 3.14,3.12,5.25,9.58,1.02 };
	int sz1 = sizeof(arr3) / sizeof(arr3[0]);
	printf("排序前的顺序为:\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%f ", arr3[i]);
	}
	qsort(arr3, sz1, sizeof(arr3[0]), compar_float);
	printf("\n排序后的顺序为:\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%f ", arr3[i]);
	}

	return 0;
}

5.qsort排序结构体数据

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

//定义一个结构体类型

//这个语句是定义了一个结构体类型,它的名字是 student,它的成员变量有两个,
//分别是 char 类型的 name 和 int 类型的 age。
//这个语句可以用来创建一个表示学生信息的数据类型,但它本身并不创建任何对象。
struct student
{
	char name[20];
	int age;
};

int comapar_student_by_age(const void* e1, const void* e2)
{

	return ((struct student*)e1)->age - ((struct student*)e2)->age;

}
int main()
{
	struct student arr4[] = { {"zhangsan",20},{"lisi",15},{"jamo",18} };
	int sz = sizeof(arr4) / sizeof(arr4[0]);
	qsort(arr4, sz, sizeof(arr4[0]), comapar_student_by_age);
	for (int i = 0; i < sz; i++)
	{
		printf("姓名:%s 年龄:%d\n", arr4[i].name, arr4[i].age);

	}
	return 0;
}

6.总结

通过以上代码我们可以看出在main函数主体部分代码基本相当一致,在使用qsort函数的主要部分就是自己写出一个compar函数来确定比较的方法。

我们来观察一下:

 

 

 我们可以看出我们只需要在compar函数中将需要排序的两个相邻元素e1和e2类型强制转换为对应的数据类型。

因为void * 空指针不能解引用


以上就是对qsort函数使用的例子和总结,谢谢支持!

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jamo@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值