通用型函数——冒泡排序

news/2024/11/2 16:20:54/

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

(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表示要复制的字节的数量。

 注意:

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


http://www.ppmy.cn/news/1543911.html

相关文章

AI 聊天机器人的兴起:GPT-3 和 BERT 如何重新定义对话体验

一、说明 当我们深入研究 AI 世界时&#xff0c;了解自然语言处理 &#xff08;NLP&#xff09; 领域取得的巨大进步非常重要。NLP 是 AI 的一个分支&#xff0c;专注于使计算机能够理解、解释和生成人类语言。GPT-3 和 BERT 等语言模型的开发是这一旅程中的一个重要里程碑&…

Android Studio获取本地aar,最新依赖jar/aar

每次清缓存后打开Android Studio的项目都要加载依赖库很久&#xff0c;那是网络要下载 依赖库和各种指针索引构建&#xff0c;本文提供获取本地依赖库的aar方法&#xff0c;然后把aar以libs的包本地方式引入&#xff0c;减少网络下载&#xff0c;会把kts和groovy的代码都展示。…

股价已经暴跌,在财报公布前,Pinterest股票该买进还是卖出?

猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;Pinterest的股价今年以来已经从最高点大幅下跌。 &#xff08;2&#xff09;在过去几年里&#xff0c;该公司的增长已经放缓。 &#xff08;3&#xff09;猛兽财经对Pinterest股价的技术分析&#xff1a;如果Pinterest的…

SpringBoot中使用多线程ThreadPoolTaskExecutor+CompletableFuture

SpringBoot中使用多线程ThreadPoolTaskExecutorCompletableFuture 定义一个线程池&#xff0c;并将其注入为bean 我使用的是spring提供的线程池&#xff0c;所以不需要写关闭的逻辑 import org.springframework.context.annotation.Bean; import org.springframework.context.…

齐次线性微分方程的解的性质与结构

内容来源 常微分方程(第四版) (王高雄,周之铭,朱思铭,王寿松) 高等教育出版社 齐次线性微分方程定义 d n x d t n a 1 ( t ) d n − 1 x d t n − 1 ⋯ a n − 1 ( t ) d x d t a n ( t ) x 0 \frac{\mathrm{d}^nx}{\mathrm{d}t^n} a_1(t)\frac{\mathrm{d}^{n-1}x}{\math…

第16课 核心函数(方法)

掌握常用的内置函数及其用法。 数学类函数&#xff1a;abs、divmod、max、min、pow、round、sum。 类型转换函数&#xff1a;bool、int、float、str、ord、chr、bin、hex、tuple、list、dict、set、enumerate、range、object。 序列操作函数&#xff1a;all、any、filter、m…

同WiFi网络情况下,多个手机怎么实现不同城市的IP

在同一个WiFi网络下&#xff0c;所有设备通常都会共享同一个公网IP地址&#xff0c;因为它们连接到的是同一个路由器。要使多个手机显示为不同城市的IP地址&#xff0c;你需要使用以下方法&#xff1a; 更改网络设置 在手机的设置中&#xff0c;可以找到“无线和网络”或“网…

Chromium 中chrome.fontSettings扩展接口定义c++

一、chrome.fontSettings 使用 chrome.fontSettings API 管理 Chrome 的字体设置。 权限 fontSettings 要使用 Font Settings API&#xff0c;您必须在扩展程序中声明 "fontSettings" 权限 清单。例如&#xff1a; {"name": "My Font Settings E…