C语言:冒泡排序的注意事项及具体实现

server/2024/9/23 3:54:59/

一、注意事项

        1、函数声明为:void bubble_sort(void* base, size_t num, size_t width, int (*cmp)(const void* e1, const void* e2));

        2、base 指向所要排序的数组

        3、num 为数组的元素个数

        4、width 为一个元素占多少个字节的空间

        5、cmp 为函数指针,指向用来进行比较的函数

        6、每趟排序都会把当前未排序部分的最大值移到正确的位置

二、具体实现

#include <stdio.h>
#include <assert.h>//交换
void sway(char* buff1, char* buff2, size_t width)
{char tmp = 0;while (width--){tmp = *buff1;*buff1 = *buff2;*buff2 = tmp;buff1++;buff2++;}
}//比较
int cmp_num(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}//冒泡排序
void bubble_sort(void* base, size_t num, size_t width, int (*cmp)(const void* e1, const void* e2))
{assert((NULL != base) && (NULL != cmp));//用断言判断 base 以及 cmp 是否为空指针int i = 0;int j = 0;int flag = 1;//假设该数组为有序num--;//趟次 num - 1 次就可以了for (i = 0; i < num; i++)//趟次{flag = 1;for (j = 0; j < num - i; j++)//一趟的过程{if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0){flag = 0;sway((char*)base + j * width, (char*)base + (j + 1) * width, width);}}if (1 == flag)//判断是否有序{return;}}
}int main()
{int arr[] = { 2, 4, 2, 1, 6, 3 };size_t sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz, sizeof(arr[0]), cmp_num);//冒泡排序int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);//结果为:1 2 2 3 4 6}return 0;
}

附:若有不足,望指出。

^_^感谢^_^


http://www.ppmy.cn/server/120609.html

相关文章

Java中stream流及Collectors的常见用法详细汇总!!!

目录 1. Stream流的优势 2. 常用用法 2.1 中间操作 2.1.1filter() 2.1.2 map() 2.1.3 sorted() 2.1.4 distinct() 2.1.5 limit() 2.1.6 skip() 2.2 终端操作 2.2.1 foreach() 2.2.2 collect() 2.2.3 reduce() 2.2.4 count() 2.2.5 anyMatch() 2.3 查找和匹配…

动态IP是如何实现的?

相信很多人都知道动态IP和静态IP的区别&#xff0c;但对于动态IP的实现过程或许还有些疑惑。那么接下来就为大家介绍一下动态IP的实现过程&#xff01; 动态IP的实现离不开一个关键协议&#xff0c;那就是DHCP。DHCP协议的主要任务就是在网络中自动分配IP地址&#xff0c;让设…

使用cmd命令窗口操作mongodb

一、效果显示 二、下载MongoDB 1. 在官网下载安装MongoDB 官网网址&#xff1a;Download MongoDB Community Server | MongoDB 我安装的版本是7.0.14(注意安装到空闲磁盘) 三、启动MongoDB服务 1. 配置环境变量 注意替换为你的路径。 2. 在MongoDB的data下创建db文件夹 在…

运维工程师面试整理-操作系统

在运维工程师的面试中,操作系统相关的知识通常是重中之重,尤其是Linux/Unix系统。以下是针对操作系统部分的一些详细内容,帮助你更好地准备面试。 1. Linux/Unix 基础 ● 常用命令 ○ 文件和目录管理:ls, cd, cp, mv, rm, mkdir, rmdir, find, grep, awk, sed

CentOS入门宝典:从零到一构建你的Linux服务器帝国

目录 引言 一、CentOS简介与版本选择 1.1 CentOS是什么&#xff1f; 1.2 版本选择 二、安装CentOS 2.1 准备安装介质 2.2 安装过程 三、基础配置与优化 3.1 更新系统 3.2 配置防火墙 3.3 配置SELinux 3.4 系统监控与日志 四、网络配置与管理 4.1 配置静态IP 4.…

华南理工大学信息工程高频电子线路课程设计——基于锁相环的调试解调器设计

完整报告链接如下&#xff1a; 通过网盘分享的文件&#xff1a;高频课设报告.docx 链接: https://pan.baidu.com/s/1J83UCDSU0UHcv4ONYxfyhg?pwdzqyr 提取码: zqyr --来自百度网盘超级会员v5的分享 懒得贴上来了&#xff0c;放一下截图。

SQL进阶技巧:火车票相邻座位预定一起可能情况查询算法 ?

目录 0 场景描述 1 数据准备 2 问题分析 2.1 分析函数法 2.2 自关联求解 3 小结

适用于QF的存档系统

存档系统 今天分享一个适用于QF的存档系统 这个系统的优点为 1、轻量化&#xff0c;总共代码不超过400行 2、自动化&#xff0c;基于QF框架&#xff0c;自动注入值 缺点&#xff1a; 1、不能序列化Unity内部类型&#xff0c;如Vector 2、需要给能被序列化的类加上【Seri…