目录铺垫知识使用qsort函数进行整型数组的排序使用qsort函数进行浮点型数组的排序使用qsort函数进行结构体数组的排序铺垫知识 qsort函数 参数类型
qsort函数
参数类型
void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));
参数类型解释
void*
参数1和参数4中的void*无类型的指针,能够接受各种类型的参数,这样的话,我们就能传各种类型的参数
void*的注意事项
由于void是无类型指针,所以
1、void类型指针不能进行加减整数的操作(不知道步长)
2、不能进行解引用操作,
3、想要进行这些操作,需要把void类型强制类型转成所需要的类型才能操作,例如(int*)e1,就将void*类型的e1转换为int*
在自己完成的in_cmp函数中,给出的是两个元素的比较方法
当然,我们可以用强制类型转换后,就知道了步长,使用减法来比较e1和e2的大小
#include<stdio.h>
#include<stdlib.h>
int int_cmp(const void* e1,const void* e2)
{
if(*(int*)e1 > *(int*)e2 )//先强制类型转换,在解引用进行比较
return 1;
else if(*(int*)e1 == *(int*)e2 )
return 0;
else
return -1;
}
int main()
{
int i=0;
int arr[10]={1,4,0,5,8,9,2,3,6,7};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr,sz,sizeof(arr[0]),int_cmp);
for(i=0;i<sz;i++)
printf("%d ",arr[i]);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int float_cmp(const void* e1,const void* e2)
{
return *(float*)e1 - *(float*)e2;
}
int main()
{
int i=0;
float arr[5]={1.0,3.5,2.2,7.3,5.5};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr,sz,sizeof(arr[0]),float_cmp);
for(i=0;i<sz;i++)
printf("%.1f ",arr[i]);
return 0;
}
以学生信息结构体为例,结构体包括学生名字和学生年龄
以名字为基准进行比较
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
char name[10];
int age;
};
//以名字来对结构体进行排序
int struct_cmp_byname(const void* e1, const void* e2)
{
return strcmp(((struct student*)e1)->name, ((struct student*)e2)->name);
}
int main()
{
int i=0;
struct student stu[3] = { {"张三",20},{"李四",19},{"王五",18}};
int sz = sizeof(stu) / sizeof(stu[0]);
qsort(stu, sz, sizeof(stu[0]), struct_cmp_byname);
for (i = 0; i < sz; i++)
{
printf("%s %d\n", stu[i].name, stu[i].age);
}
}
以年龄为基准进行比较
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
char name[10];
int age;
};
//以年龄来对结构体进行排序
int struct_cmp_byage(const void* e1, const void* e2)
{
return ((struct student*)e1)->age - ((struct student*)e2)->age;
}
int main()
{
int i=0;
struct student stu[3] = { {"张三",20},{"李四",19},{"王五",18}};
int sz = sizeof(stu) / sizeof(stu[0]);
qsort(stu, sz, sizeof(stu[0]), struct_cmp_byage);
for (i = 0; i < sz; i++)
{
printf("%s %d\n", stu[i].name, stu[i].age);
}
}
到此这篇关于一文带你学会C语言中的qsort函数的文章就介绍到这了,更多相关C语言 qsort函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 一文带你学会C语言中的qsort函数
本文链接: https://lsjlt.com/news/175393.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0