这里写目录标题

  • 快速排序
    • 结构体排序
    • 模仿qsort函数实现冒泡排序
      • 三级目录

快速排序

//快速排序
void qsort(void* base,              //base中存放待排序数据中第一个对象地地址size_t num,                      //排序数据元素的个数size_t size,                 //排序数据中一个元素的大小,单位是字节int(*cmp)(const void*, const void*)  //比较待排序数据中两个元素的函数
);//这是c语言的一个库函数
int cmp_int(const void* e1, const void* e2) {return (*(int*)e1 - *(int*)e2);
}
void print_arr(int arr[], int sz) {int i = 0;for (i = 0; i < sz; i++) {printf("%d ", arr[i]);}printf("\n");
}
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]), cmp_int);print_arr(arr, sz);return 0;
}

结构体排序

int cmp_int(const void* e1, const void* e2) {return (*(int*)e1 - *(int*)e2);
}
void print_arr(int arr[], int sz) {int i = 0;for (i = 0; i < sz; i++) {printf("%d ", arr[i]);}printf("\n");
}
void test1() {//整型数据的排序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]), cmp_int);print_arr(arr, sz);
}
struct Stu {char name[20];int age;
};
int sort_by_age(const void* e1, const void* e2) {return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;  //强制类型转换
}
int sort_by_name(const void* e1, const void* e2) {//return ((struct Stu*)e1)->name - ((struct Stu*)e2)->name;return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void test2() {//结构体数据的排序struct Stu s[] = { {"zhangsan",30},{"lisi",34},{"wangwu",20} };int sz = sizeof(s) / sizeof(s[0]);//按照年龄排序qsort(s, sz, sizeof(s[0]), sort_by_age);//按照姓名字母排序qsort(s, sz, sizeof(s[0]), sort_by_name);
}
int main() {                        //升序//test1();test2();return 0;
}

模仿qsort函数实现冒泡排序

//模仿qsort函数实现冒泡排序
void Swap(char* buf1, char* buf2, int width) {int i = 0;for (i = 0; i < width; i++) {char tmp = *buf1;*buf1 = *buf2;*buf2 = tmp;buf1++;buf2++;}
}
void bubble_sort(void* base,int sz,int width,int(*cmp)(const void* e1, const void* e2)) {   //const只比较不交换int i = 0;for (i = 0; i < sz - 1; i++) {    //趟数int j = 0;for (j = 0; j < sz - 1 - i; j++) { //一趟的排序//两个元素比较(可能是各种元素类型)if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0) {Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);}}}
}void test3() {int arr[] = { 1,3,5,7,9,2,4,6,8,0 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);print_arr(arr, sz);
}
int main() {                        //升序test3();return 0;
}

三级目录

【C语言】结构体排序相关推荐

  1. c语言程序结构体排序,C语言结构体排序方法

    #include "stdafx.h" #include #include #include using namespace std; struct student { strin ...

  2. C语言中对结构体排序

    在C语言中对结构体排序 用qsort()函数进行排序, qsort()里面要传入4个参数–qsort(数组名,数组长度,sizeof(),排序方法) 实验9-5 查找书籍 (20分) 给定n本书的名称 ...

  3. C语言结构体自定义排序

    结构体自定义排序: 在最基础的C语言中,排序较为简单的有三种:冒泡,选择,插入.其中选择最劣.复杂一点的有快速排序和归并排序,在这里后两种我就不介绍了. 在使用结构体排序的时候,里面可能有许多不同的对 ...

  4. C语言结构体和结构体排序

    结构体 结构体是一种构造数据类型 (构造数据类型包括:数组类型.结构体类型.共用体类型) 定义:把不同的数据组合成一个整体. 结构体的一般形式 struct [结构体名称]//struct是关键字 { ...

  5. 按平均成绩排行c语言文件操作,学生成绩管理系统(c语言结构体以及文件操作)实验报告精选.doc...

    学生成绩管理系统(c语言结构体以及文件操作)实验报告精选 C程序设计 实验报告 编号: 姓名院系学号任课教师于萧指导教师实验地点实验时间实验名称文件操作同 组 人无预习报告(对实验主要内容的认识)得分 ...

  6. c语言结构体编辑学生成绩管理,C语言基于结构体的学生信息管理系统实现

    宋福英 摘  要: 中国高校为保证学生信息安全,各分院的学生信息都在一个相对封闭的闭环内共享.中国高校在校生人数逐年递增,给高校的信息管理带来不小压力.C语言兼具高级语言和汇编语言的特点,简洁.紧凑. ...

  7. 利用C语言结构体实现学生成绩录入系统

    利用C语言结构体实现学生成绩录入系统 ##功能介绍 密码功能嵌入于主函数中,初始密码为:123456(可根据需要修改) 输入1可以调用add函数对学生的基本信息以及成绩进行输入 输入2则调用print ...

  8. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  9. c语言结构体教案,结构体——教学设计

    <结构体--教学设计>由会员分享,可在线阅读,更多相关<结构体--教学设计(7页珍藏版)>请在人人文库网上搜索. 1.课堂教学设计表章节名称结构体学科C语言程序设计授课班级大一 ...

最新文章

  1. C#利用lambda在函数中创建内部函数
  2. Docker容器中挂载NFS共享目录
  3. NSPredicate的用法、数组去重、比较...
  4. 别忘了当初你为何出发
  5. Python matplotlib绘制直方图
  6. Java学习笔记2.6.2 数组 - 二维数组
  7. centos7 常用命令参考
  8. [转载] Python正则表达式(含正则表达式速查表)
  9. web安全day38:使用Vulhub一键搭建测试靶场
  10. C# web 后台页面间的跳转
  11. redis详解_java 从零开始手写 redis(14)redis渐进式rehash详解
  12. soapui使用教程1-基本使用和录制
  13. 电脑网易云音乐,网易云音乐的橄榄枝来了?
  14. 助力运动:实时乒乓球视频分析
  15. python数字不同数之和_python练习 数字不同数之和+人名最多数统计
  16. 戈登贝尔奖是超级计算机应用的最高奖,中国首获高性能计算应用领域最高奖戈登贝尔奖...
  17. QQ农场启示录之:偷菜成本核算
  18. 困住黑猫 html5,百变大侦探白狐凶手是谁 百变大侦探白狐密室密码
  19. Fliptile 翻格子游戏
  20. echarts柱状图多组数据配置

热门文章

  1. [zz] 腾讯云 AV1落地
  2. Win11限制第三方浏览器工具:默认打开需用微软的edge浏览器
  3. 12306滑块验证登录分析
  4. Unity Shader - Curved World - 类似 地铁跑酷,动物森友会 的世界扭曲效果 - 球形透视
  5. 首届中国房地产数字峰会圆满落幕,关于地产第二增长曲线,他们的答案在这里...
  6. LeetCode-994-腐烂的橘子
  7. linux恢复树莓派内存卡容量,树莓派自动扩展tf卡剩余空间
  8. linux 服务器 物联网吗,你知道为什么物联网需要LPWAN吗?
  9. Java语言的运行机制
  10. C#测量字体大小的问题