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

用冒泡排序法模拟qsort函数

目录

1.前言

2.qsort函数的介绍

​3.冒泡法回顾

4.模拟qsort---buble_sort

4.1 buble_sort格式

4.2 主函数,以int类型为例

4.3comp_int函数的功能设计

4.4 swap函数的功能设计

5. 总代码概览


1.前言

今天,小邓儿带大家用冒泡排序法来模拟一下qsort函数,废话不都说,咱们开整。

2.qsort函数的介绍

void qsort( void *base,     //指向的要比较数组的起始地址

                     size_t num,   // 数组大小(元素总数)

                     size_t width,   //数组中一个元素的大小(单位字节)

                      int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

                     //比较elem1和elem2的大小,下图为qsort函数第4个参数的描述 

3.冒泡法回顾​​​​​​​

一共进行sz-1趟循环,每一趟又依次比较一个数和它后面一个数的大小,最终按从小到大的默认顺序进行排列。

4.模拟qsort---buble_sort

4.1 buble_sort格式

void bubble_sort(void* base,
                             int sz,
                             int width,
                             int(*comp)(const void*, const void*));

具体函数内部情况如下图

这里的bublue_sort函数,先是会调用comp函数进行两个数的比较,经过判断后,再会调用swap函数进行交换

4.2 主函数,以int类型为例

现在,咱们需要用comp_int来模拟实现compare函数的功能。

4.3comp_int函数的功能设计

int comp_int(const void* e1, const void* e2)
{
    return *(int*)e1 - *(int*)e2;
}

//这里参考下图compare的功能

Return ValueDescription
< 0elem1 less than elem2
0elem1 equivalent to elem2
> 0

elem1 greater than elem2

4.4 swap函数的功能设计

5. 总代码概览

#include<stdio.h>
#include<string.h>
int comp_int(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}
void swap(char* e1, char* e2, int width)
{
	int i = 0;
	for (i = 0; i < width;i++)
	{
		int t = *e1;
		*e1 = *e2;
		*e2 = t;
		e1++;
		e2++;
	}
}
void bubble_sort(void* base,
	int sz,
	int width,
	int(*comp)(const void*, const void*))//传过来的形参是指针
{
	int i, j;
	for (i = 0; i < sz - 1; i++)
	{
		int flag = 1;//按从小到大顺序排列
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (comp((char*)base + j * width, (char*)base + (j + 1) * width )>0)//comp的实参是两个地址
			{
				swap((char*)base + j * width, (char*)base + (j + 1) * width,width);
				flag = 0;//未按顺序排列
			}
		}
		if (flag == 1)
		{
			break;
		}
	}
}
void Print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}
int main()
{
	int arr[] = { 1,2 ,4 ,3, 6,5,7,9,0 };
	int sz ;
	sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz, sizeof(arr[0]), comp_int);
	Print(arr,sz);
}

好了,小邓儿今天的分享就到这里了,欢迎老铁们点赞收藏😄😄😄

相关文章:

  • LabVIEW中三种PSD分析VI的区别与应用
  • 微调训练方法概述:Fine-tuning、Prompt-tuning、P-tuning 及其他高效技术
  • pwa的基本使用
  • 2W8000字 LLM架构文章阅读指北
  • pytorch2.6.0版本测试YOLOv5中detect.py错误解决办法
  • http报文的content-type参数和spring mvc传参问题
  • 高频 SQL 50 题(基础版)_550. 游戏玩法分析 IV
  • 系统架构设计师—计算机基础篇—系统性能评价
  • 深度学习pytorch之4种归一化方法(Normalization)原理公式解析和参数使用
  • 小结:BGP协议
  • AtCoder Beginner Contest 001(A - 積雪深差、B - 視程の通報、C - 風力観測、D - 感雨時刻の整理)题目翻译
  • 贪心算法+题目
  • Sqli-labs
  • 从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(八) 聊天框用户列表
  • ByteBuddy
  • 联合省选 2025 游记
  • 【随手笔记】FFT+音乐频谱(二)
  • 工程化与框架系列(8)--持续集成实践
  • OpenFlow 全解析:前世今生与未来走向
  • 【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.5 渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的?
  • 新建网站怎么想谷歌和百度提交/莱阳seo排名
  • 武汉网站关键词优化/一站式营销平台
  • 行业b2b网站建设/培训网站制作
  • 建设银行网站怎么修改手机号码吗/电脑清理优化大师
  • 日ip 1万 网站 值多少钱/网站怎么收录到百度
  • 合肥网站设计建/seo外包收费