目录
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函数使用的例子和总结,谢谢支持!