C语言 qsort及应用

news/2024/12/5 17:02:07/

qsort及应用

qsort:快速排序函数,需要引用stdlib.h文件.

void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
参数:
base:需要排序的数组
num:数据个数(数组长度)
width:每个数据的字节数(sizeof(数据类型))
compare:比较大小的依据

        在进行排序时,一定需要比较两个数据的大小,由于qsort能对任意的数据进行排序,那么它无法知道排 序的规则,这个需要使用的人通过参数把这个传递给qsort,也就是上面的compare参数。

下面列举一些利用qsort的应用示例.

1.对char类型排序(注意是字符,不是字符串)

2.对int类型排序

3.对double类型排序

4.对Student类型,按姓名排序

5.对Student类型,按分数排序

 

typedef struct Student
{
char name[20];//姓名
int score;//分数
}Student;
int Cmp_char(const void* vp1, const void* vp2)
{
return *(char*)vp1 - *(char*)vp2;
}
//int Cmp_int(int* p1, int* p2)
int Cmp_int(const void *vp1,const void*vp2)
{
return *(int*)vp1 - *(int*)vp2;//默认升序
//return -( *(int*)vp1-*(int*)vp2);//降序
}
//int Cmp_double(const double*vp1,const double *vp2);
int Cmp_double(const void* vp1, const void* vp2)
{
//return *(double*)vp1 - *(double*)vp2; //12.3-12.7 == -0.4 -> 0 (这两个
相等) 错误的
double tmp = *(double*)vp1 - *(double*)vp2;
if (tmp > 0)
return 1;
else if (tmp < 0)
return -1;
else
return 0;
}
int Cmp_stu_src(const void* vp1, const void* vp2)
{
return ((Student*)vp1)->score - ((Student*)vp2)->score;
}
int Cmp_stu_name(const void* vp1, const void* vp2)
{
return strcmp(((Student*)vp1)->name, ((Student*)vp2)->name);
}
void Show(int* arr, int len)
{
for (int i = 0; i < len; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
void Show(double* arr, int len)
{
for (int i = 0; i < len; i++)
{
printf("%.2lf ",arr[i]);
}
printf("\n");
}
void Show(Student* arr, int len)
{
for (int i = 0; i < len; i++)
{
printf("%s,%d\n",arr[i].name,arr[i].score);
}
}
int main()
{
char arr[] = "aajdsfljsadzyxytp";
int brr[] = {1,6,9,0,2,5,8,12,56,7,91};
double crr[] = {12.3,34.5,6.4,12.7,12.2,26.7};
Student drr[] = { {"liubei",80},{"caocao",70},{"sunquan",90},
{"zhangfei",30},{"guanyu",85}};
//qsort(arr,strlen(arr),sizeof(char),Cmp_char);
//printf("%s\n",arr);
//qsort(brr,sizeof(brr)/sizeof(brr[0]),sizeof(int),Cmp_int);
//Show(brr, sizeof(brr) / sizeof(brr[0]));
//qsort(crr, sizeof(crr) / sizeof(crr[0]), sizeof(double), Cmp_double);
//Show(crr, sizeof(crr) / sizeof(crr[0]));
//按分数从低到高
//qsort(drr,sizeof(drr)/sizeof(drr[0]), sizeof(Student), Cmp_stu_src);
//Show(drr, sizeof(drr) / sizeof(drr[0]));
//按姓名排序
qsort(drr, sizeof(drr) / sizeof(drr[0]),sizeof(Student),Cmp_stu_name);
Show(drr, sizeof(drr) / sizeof(drr[0]));
return 0;
}

http://www.ppmy.cn/news/1551123.html

相关文章

docker从入门到入土

卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ …

HtmX 表达的创建和交互

HTMX 提供了强大的功能&#xff0c;使得开发者能够创建可交互的表单元素&#xff0c;并提供更好的用户体验。以下是如何使用 HTMX 创建可交互表单元素的步骤&#xff1a; 1. 创建表单元素: 使用 HTML 创建基本的表单元素&#xff0c;例如 <input>、<select> 和 <…

go结构体匿名“继承“方法冲突时继承优先顺序

在 Go 语言中&#xff0c;匿名字段&#xff08;也称为嵌入字段&#xff09;可以用来实现继承的效果。当你在一个结构体中匿名嵌入另一个结构体时&#xff0c;嵌入结构体的方法会被提升到外部结构体中。这意味着你可以直接通过外部结构体调用嵌入结构体的方法。 如果多个嵌入结…

从技术视角看AI在Facebook全球化中的作用

在全球化日益加深的今天&#xff0c;人工智能&#xff08;AI&#xff09;作为一种变革性技术&#xff0c;正在深刻影响全球互联网巨头的发展方向。Facebook作为全球最大的社交媒体平台之一&#xff0c;正通过AI技术突破语言、文化和技术的障碍&#xff0c;推动全球化战略的实现…

3.26线性回归对率回归

就是说右边的线性组合算出一个z&#xff0c;在阶跃函数里&#xff0c;z>0就是1&#xff0c;<0就是-1 然后用对率回归的话就是大于0时是一个大于0.5的数&#xff0c;是计算得到的 最后输出的都是一个是不是的概率 只是传统的话&#xff0c;Z直接就是结果&#xff0c;而…

AI开发:生成式对抗网络入门 模型训练和图像生成 -Python 机器学习

阶段1&#xff1a;GAN是个啥&#xff1f; 生成式对抗网络&#xff08;Generative Adversarial Networks, GAN&#xff09;&#xff0c;名字听着就有点“对抗”的意思&#xff0c;没错&#xff01;它其实是两个神经网络互相斗智斗勇的游戏&#xff1a; 生成器&#xff08;Gene…

气膜建筑:打造全天候安全作业空间,提升工程建设效率—轻空间

在现代建筑工程中&#xff0c;施工环境的管理和作业效率是决定项目进度和质量的关键因素。然而&#xff0c;施工过程中常常会受到天气变化的影响&#xff0c;诸如大风、雨雪、沙尘等恶劣天气常常延误工期&#xff0c;增加施工难度。为了解决这一问题&#xff0c;气膜建筑以其独…

计算机网络八股整理(三)

目录 计算机网络八股&#xff08;三&#xff09;传输层1&#xff1a;说一下tcp的头部&#xff1f;2&#xff1a;tcp三次握手的过程说一下&#xff1f;拓展linux中查看tcp状态&#xff1a; 3:tcp为什么需要三次握手建立连接&#xff1f;4&#xff1a;tcp三次握手&#xff0c;如果…