通用型函数——冒泡排序

对于一般类型数据冒泡排序

(int 、double 、char 、flort)

代码:(int型)

复制代码
void bubble_sort(int* arr){
	int len=sizeof(arr)/sizeof(int);
	int temp=0;
	for(int i=0;i<len-1;i++){
		for(int j=0;j<(len-i-1);j++){
			if(arr[j]<arr[j+1]){
				temp=arr[j];
				arr[j]=arr[i];
				arr[i]=temp;
			}
		}
	}
}

代码:(double型)

复制代码
void bubble_sort(double* arr){
	int len=sizeof(arr)/sizeof(double);
	double temp=0;
	for(int i=0;i<len-1;i++){
		for(int j=0;j<(len-i-1);j++){
			if(arr[j]<arr[j+1]){
				temp=arr[j];
				arr[j]=arr[i];
				arr[i]=temp;
			}
		}
	}
}

代码:(char型)

复制代码
void bubble_sort(char* arr){
	int len=sizeof(arr)/sizeof(char);
	char temp=0;
	for(int i=0;i<len-1;i++){
		for(int j=0;j<(len-i-1);j++){
			if(arr[j]<arr[j+1]){
				temp=arr[j];
				arr[j]=arr[i];
				arr[i]=temp;
			}
		}
	}
}

由上述代码发现,如果要编写通用型冒泡函数,我们需要解决以下问题:

  • 传入排序数据的数据类型无法做到统一;
  • 数据中转变量temp需要根据数据转换成相应的数据类型,以方便数据转换;
  • 判断语句 if() 中数据中元素的比较无法统一比较方法;

通用型冒泡排序函数的演变过程

解决方法及代码实现:

复制代码
//对于if()中的比较,直接自己编写比较函数,冒泡排序函数预留比较函数的形参位置即可;
//eg;int((*comp)(*void,*void))

int comp_int(void* a,void* b){
	return *(int*)a - *(int*)b;
}

int comp_double(void* a,void* b){
	return *(double*)a - *(double*)b;
}

//对于数据类型,直接用void*arr代替即可;
//对于数据转换,直接使用memcpy,以及各种数据类型的字节大小传入即可;

void bubble_sort(void* arr,int len,int size,int(*comp)(void*,void*)){
	char temp[size];
	memset(temp,0,size);
	for(int i=0;i<len-1;i++){
		for(int j=0;j<len-i-1;j++){
			if(         comp(arr+j*size,arr+(j+1)*size) < 0           ){
			//	temp = arr[j];
			//	arr[j] = arr[j+1];
			//	arr[j+1] = temp; 
				memcpy(temp,arr+j*size,size);
				memcpy(arr+j*size,arr+(j+1)*size,size);
				memcpy(arr+(j+1)*size,temp,size);
			}
		}
	}
}

memcpy函数

函数原型:

void *memcpy(void *dest, const void *src, size_t n);

功能:

memcpy函数用于将指定数量的字节从源内存地址(src)复制到目标内存地址(dest)。

参数说明:

n : 要复制的字节数,类型为size_t表示要复制的字节的数量。

注意:

计算机中,任何数据最终都是二进制数,故只需有足够的空间,就可以将任何数据存储起来,相应的,读取时使用数据类型容器识别就可还原原本的意思。

相关推荐
RD_daoyi10 分钟前
Google SEO 第六周:外链建设与网站权重提升 —— 让排名直冲首页的终极推力
大数据·学习·搜索引擎
AI_零食10 分钟前
甄嬛人物日志-朗读升级 - 鸿蒙PC Electron框架完整技术实现指南
前端·学习·华为·electron·鸿蒙·鸿蒙系统
段一凡-华北理工大学27 分钟前
工业领域的Hadoop架构学习~系列文章17:Hadoop性能调优- 调度集群每一分性能
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
星雨流星天的笔记本44 分钟前
英语听力口语句式积累(二)
学习
YouCanYouUp.1 小时前
英恒科技 2 天冲刺复习(精准匹配你的经历)
科技·学习
TTGGGFF1 小时前
ModelSim SE 10.1c 超详细安装与激活保姆级教程(图文详解 2026 仅供学习)
学习·fpga开发
数智工坊1 小时前
周志华《Machine Learning》学习笔记--第十一章--特征学习与稀疏学习
笔记·学习·机器学习
喵叔哟1 小时前
第2周学习笔记
笔记·python·学习·langchain
ZC跨境爬虫1 小时前
跟着 MDN 学JavaScript day_6:JavaScript 中的基础数学——数字与运算符
开发语言·前端·javascript·学习·ecmascript
MartinYeung51 小时前
[论文学习]网路知识产权面临风险:防止大型语言模型未经授权即时检索
人工智能·学习·语言模型