qsort库函数的使用

目录

1.认识qsort函数

2.qsort 排序整型数据

3.qsort排序字符型数据

4.qsort排序浮点型数据、

5.qsort排序结构体数据

6.总结


1.认识qsort函数

qsort库函数的使用_第1张图片qsort库函数的使用_第2张图片

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

 翻译以上信息如下:

qsort库函数的使用_第3张图片

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

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

qsort函数参数如上:


2.qsort 排序整型数据

#include
#include
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
#include
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
#include
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
#include

//定义一个结构体类型

//这个语句是定义了一个结构体类型,它的名字是 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函数来确定比较的方法。

我们来观察一下:

qsort库函数的使用_第4张图片

qsort库函数的使用_第5张图片

 qsort库函数的使用_第6张图片

qsort库函数的使用_第7张图片 

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

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


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

你可能感兴趣的:(C语言进阶,c语言,库函数,qsort)