首页 > 其他分享 >关于C语言库函数qsort的学习

关于C语言库函数qsort的学习

时间:2023-01-05 22:02:20浏览次数:47  
标签:int void float qsort C语言 sizeof e2 e1 库函数

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Stu
{
char name[20];
int age;
};

//void qsort(void* base,
// size_t num,
// size_t width,
// int(*cmp)(const void *e1,const void *e2)
// );

int cmp_int(const void *e1,const void *e2)
{
//比较两个整形值
return *(int*)e1-*(int*)e2;
//e1和e2是两个要比较的元素
}

int cmp_float(const void *e1,const void *e2)
{
/*if(*(float*)e1==*(float*)e2)
return 0;
else if(*(float*)e1>*(float*)e2)
return 1;
else
return -1;*/
return (int)(*(float*)e1-*(float*)e2);
}
int cmp_stu_by_name(const void *e1,const void *e2)
{
//比较名字就是比较字符串
//字符串比较不能直接用><=来比较,应该用strcmp函数
return strcmp(((struct Stu*)e1)->name,((struct Stu*)e2)->name);
}
void test1()
{
int arr[10]={9,8,7,6,5,4,3,2,1,0};
int sz=sizeof(arr)/sizeof(arr[0]);
int i=0;
qsort(arr,sz,sizeof(arr[0]),cmp_int);

for(i=0;i<sz;i++)
{
printf("%d ",arr[i]);
}
}
void test2()
{
float f[]={9.0,8.0,7.0,6.0,5.0,4.0};
int sz=sizeof(f)/sizeof(f[0]);
int i=0;
qsort(f,sz,sizeof(f[0]),cmp_float);
for(i=0;i<sz;i++)
{
printf("%f ",f[i]);
}

}

void test3()
{
struct Stu s[3]={ {"zhangsan",20},{"lisi",30}{"wangwu",10}};
int sz=sizeof(s)/sizeof(s[0]);
qsort(s,sz,sizeof(s[0]),cmp_stu_by_name);
}
int main()
{

test2();
//struct Stu s[3]={ {"zhangsan",20},{"wangwu",10}};
//float f[]={9.0,8.0,7.0,6.0,5.0,4.0};

//arr排序的数组的起始位置,sz元素的地址,sizeof(arr[0]一个元素的大小单位是字节,cmp_int排序的方法)
}

标签:int,void,float,qsort,C语言,sizeof,e2,e1,库函数
From: https://blog.51cto.com/u_15922371/5991936

相关文章

  • C语言指针常见问题
    我们在学C语言时,指针是我们最头疼的问题之一,针对C语言指针,博主根据自己的实际学到的知识以及开发经验,总结了以下使用C语言指针时常见问题。指针指针做函数参数学习......
  • C语言银行业务模拟系统[2023-01-04]
    C语言银行业务模拟系统[2023-01-04]银行业务模拟系统系统要求使用C语言实现一个银行业务模拟程序,实现存取款等基本业务的模拟。选题者需要首先进行需求调研,了解银行的主......
  • C语言:任意数量的鸡兔同笼问题
    #include<stdio.h>//任意鸡兔同笼问题main(){inta,b,ji,tu,d=0;scanf("%d%d",&a,&b);for(ji=0;ji<=a+b;ji++){for(tu=0;tu<=a+b;tu++)......
  • C语言学生成绩管理系统[2023-01-04]
    C语言学生成绩管理系统[2023-01-04]设计题目:《学生成绩管理系统》设计目的利用所学的三种程序基本结构以及数组、用户自定义函数进行一个简单管理系统的设计,进一步理......
  • C语言车票管理系统[2023-01-04]
    C语言车票管理系统[2023-01-04]一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如......
  • C语言学院毕业论文管理系统
    C语言学院毕业论文管理系统37.学院毕业论文管理系统学院毕业论文基本信息包括:姓名、学号、专业、题目、毕业时间、指导老师、学生联系电话。论文结果:优、良、中、及格、......
  • C语言:甲乙轮流取硬币,每次最少1个,最多3个,甲先取,取走最后1个硬币者获胜
    #include<stdio.h>//n个硬币,甲(Rui)乙(Seven)两人轮流取硬币,每次最少取1个,最多取3个。甲先取,取走最后1个硬币者获胜;//甲乙都能做出最佳选择的情况下,输赢只与硬币数量n......
  • 《C语言程序设计》1.5while(getchar()!=EOF)与xcode的适配问题
    最近在复习C语言,《C语言程序设计》1.5字符输入/输出部分涉及到如下代码:while(getchar()!=EOF)输入一段字符串并回车后发现无法跳出while循环。首先尝试用键盘输入EOF,......
  • C语言--常用进程间通信方式
    管道管道是一种队列型的数据结构,它的数据从一端输入,另一端输出。管道最常见应用就是连接两个进程的输入和输出,将一个进程的输入作为另一个进程的输出。shell中有专门的管......
  • C语言中使用ESL连接FreeSwitch
    前言之前在【FreeSwitch开发实践】在nodejs中用ESL连接FreeSwitch一文介绍了在NodeJS下使用ESL连接FreeSwitch,本文则对在C语言下使用ESL连接FreeSwitch作了一个系统介绍......