当前位置: 首页 > news >正文

c语言:模拟实现qsort函数

qsort函数的功能:


 

 

qsort相较于冒泡排序法,不仅效率更快,而且能够比较不同类型的元素,如:浮点数,结构体等等。这里我们来模拟下qsort是如何实现这一功能的,方便我们对指针数组有一个更深层次的理解。 以结构体中年龄的排序举例。

代码: 

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Swap(char* buf1, char*buf2, size_t width)//传入数组1,数组2的地址,传入数组大小
{int i = 0;for (i = 0; i < width; i++) {char tmp = *buf1;//交换元素*buf1 = *buf2;*buf2 = tmp;buf1++;buf2++;}
}
void bubble_sort2(void* base, size_t sz, size_t width, int (*cmp)(const void* p1, const void* p2))//模拟qsort函数
{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);//交换所占的空间}}}
}
struct Stu//结构体
{char name[20];int age;
};
int cmp_stu_by_age(const void* p1, const void* p2)
{return ((struct Stu*)p1)->age - ((struct Stu*)p2)->age;//比较元素大小
}
void test1()
{struct Stu arr[] = { {"zhangshan",18},{"lisi",54},{"wangwu",17} };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort2(arr, sz, sizeof(arr[0]), cmp_stu_by_age);int i = 0;for (i = 0; i < sz; i++){printf("%s %d\n", arr[i].name, arr[i].age);}
}
int main()
{test1();return 0;
}

效果:

 

http://www.lryc.cn/news/235987.html

相关文章:

  • 从0开始学习数据结构 C语言实现 1.前篇及二分查找算法
  • VSCode 使用CMakePreset找不到cl.exe编译器的问题
  • 【Linux系统化学习】进程的状态 | 僵尸进程 | 孤儿进程
  • 深信服AC流量管理技术
  • 二元关系及关系代数中的象集、除运算
  • [PHP]关联和操作MySQL数据库然后将数据库部署到ECS
  • 23.11.19日总结
  • 系列一、JVM概述
  • milvus数据管理-压缩数据
  • SpringBoot项目连接linux服务器数据库两种解决方法(linux直接开放端口访问本机通过SSH协议访问,以mysql为例)
  • 【Rust】快速教程——闭包与生命周期
  • redis高级案列case
  • Vue3+Vite实现工程化,attribute属性渲染v-bind指令
  • 下一代搜索引擎会什么?
  • WPF中如何在MVVM模式下关闭窗口
  • 【数据结构&C++】二叉平衡搜索树-AVL树(25)
  • Python算法——树的最大深度和最小深度
  • 46.全排列-py
  • 系列三、GC垃圾回收算法和垃圾收集器的关系?分别是什么请你谈谈
  • WPF中的虚拟化是什么
  • 免费稳定几乎无门槛,我的ChartGPT助手免费分享给你
  • 奇瑞金融:汽车金融行业架构设计
  • milvus数据库分区管理
  • pytorch.nn.Conv1d详解
  • 大数据HCIE成神之路之数学(2)——线性代数
  • 音视频学习(十八)——使用ffmepg实现视音频解码
  • nginx的GeoIP模块
  • mac控制台命令小技巧
  • Postman:API测试之Postman使用完全指南
  • Flume学习笔记(3)—— Flume 自定义组件