qsort函数详解

简介: qsort函数详解

目录

整型数组排序

浮点型数组排序:

结构体排序:

按年龄排:

按名字拼音排:

c库函数——qsort

是<stdlib.h>的一个库函数,作用是对数组进行排序。

image.png

  • base -- 指向要排序的数组的第一个元素的指针。
  • nitems -- 由 base 指向的数组中元素的个数。
  • size -- 数组中每个元素的大小,以字节为单位。
  • compar -- 用来比较两个元素的函数。

image.png

compar函数要自己写,里面对两个元素进行比较,

第一个大于第二个返回1

第一个等于第二个返回0

第一个小于第二个返回-1

qsort函数没有返回值

例子:

整型数组排序

#include<stdio.h>
#include<stdlib.h>
int compar(const void* e1, const void* e2)
{
  return (*(int*)e1 - *(int*)e2);
}
int main()
{
  int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  qsort(arr, sz, sizeof(arr[0]), compar);
  int j = 0;
  for (j = 0; j < sz; j++)
  {
    printf("%d ", arr[j]);
  }

输出结果:

image.png

浮点型数组排序:

#include<stdio.h>
#include<stdlib.h>
int compar(const void* e1, const void* e2)
{
  return (*(int*)e1 - *(int*)e2);
}
int main()
{
  float arr[10] = { 9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  qsort(arr, sz, sizeof(arr[0]), compar);
  int j = 0;
  for (j = 0; j < sz; j++)
  {
    printf("%0.2f ", arr[j]);
  }
}

输出结果:

image.png

结构体排序:

按年龄排:

#include<stdio.h>
#include<stdlib.h>
struct Stu
{
  char name[20];
  int age;
};
int compar(const void* e1, const void* e2)
{
  return(((struct Stu*)e1)->age - ((struct Stu*)e2)->age);
}
int main()
{ 
  struct Stu s[3] = { {"张三",20},{"李四",45},{"王五",15} };
  int sz = sizeof(s) / sizeof(s[0]);
  qsort(s, sz, sizeof(s[0]), compar);
  int j = 0;
  for (j = 0; j < sz; j++)
  {
    printf("%s,%d   ",s[j].name,s[j].age);
  }
}

输出结果:

image.png

按名字拼音排:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Stu
{
  char name[20];
  int age;
};
int compar(const void* e1, const void* e2)
{
  return  strcmp(((struct Stu*)e1)->name ,((struct Stu*)e2)->name);
}
int main()
{ 
  struct Stu s[3] = { {"张三",20},{"李四",45},{"王五",15} };
  int sz = sizeof(s) / sizeof(s[0]);
  qsort(s, sz, sizeof(s[0]), compar);
  int j = 0;
  for (j = 0; j < sz; j++)
  {
    printf("%s,%d   ",s[j].name,s[j].age);
  }
}

输出结果:

image.png

相关文章
|
前端开发 安全 Java
SpringBoot 实现登录验证码(附集成SpringSecurity)
SpringBoot 实现登录验证码(附集成SpringSecurity)
754 0
|
12月前
|
运维 监控 安全
七载耕耘,全面盘点:Zabbix实战文章精华大全分享
在数字化转型的推动下,IT监控系统的重要性日益凸显。Zabbix作为开源监控领域的佼佼者,以其卓越的功能集成和灵活性赢得了全球企业的青睐。乐维社区由一群热爱技术的运维人员于七年前创立,现已成为国内最大的开源专业社区之一,汇聚了众多Zabbix用户的智慧与经验。社区提供了从基础安装到高级优化的全方位实战指导,并整理了“Zabbix实战文章精华大全”,涵盖基础知识、安全配置、性能优化等内容,为广大用户提供系统化的学习资源。欢迎下载使用,共同成长。
180 1
|
开发框架 缓存 数据库
Python中的Web开发:Flask与Django的比较与选择
Python中的Web开发:Flask与Django的比较与选择
913 0
VOS3000 AXB模块工作原理
OS AXB 模块适用于语音市场直连运营商或虚拟运营商 X 号平台的业务需求 与 VOS 系统无缝集成,无需独立服务器部署,节约硬件,网络成本 单机支持不低于 2,000 并发 AXB 呼叫,性能是市面常见 AXB 产品的 2-3 倍
VOS3000 AXB模块工作原理
|
机器学习/深度学习 算法 Java
Java代码利用朴素贝叶斯分类算法实现信息分类
Java代码利用朴素贝叶斯分类算法实现信息分类
283 0
Java代码利用朴素贝叶斯分类算法实现信息分类
|
测试技术
【刷题记录】13. 罗马数字转整数
【刷题记录】13. 罗马数字转整数
200 0
【刷题记录】13. 罗马数字转整数
从哪里为业余项目挤出时间?
发布于 2014-02-21 自从公布了业余项目(side-project)的收入,我收到了很多次这个问题:“你真的有4个孩子和一份全职工作吗?!你从哪儿为业余项目挤出时间的?” 回答时,我想编造一些听起来非常令人印象深刻的回答:“嗯,我每晚熬夜,拼命奋斗到眼睛充血。” 但我没有那样做。目前我也没有使用非常复杂的时间管理哲学。这里有一些我马上要做的已经使我受益的事情。如果你像我一样(为人父母 并且/或 有一份全职工作),那么这些事也许也会对你有帮助:
168 0
从哪里为业余项目挤出时间?
|
Java 数据库 Android开发
Android注入框架ButterKnife使用解析
Android注入框架ButterKnife使用解析
261 0
|
SQL 人工智能 自然语言处理
Great Wolf旅馆采用人工智能技术了解客人的体验和评论
Great Wolf旅馆正在使用人工智能软件更好地了解客人在其以冒险为主题的旅馆的亲身体验。这项工作是Great Wolf旅馆整合数字战略的一部分,该战略融合了云计算和SaaS技术,以及新的物业管理和客户关系管理(CRM)系统。
183 0
|
弹性计算
域名在阿里云注册的是由阿里云提供网站备案吗?
当你在阿里云注册域名后,建站还是由阿里云提供网站备案服务吗?
599 0