实现一个bubble_sort函数,可以完成int ,float,char,string类型的排序
来源:互联网 发布:淘宝多久不能追加评论 编辑:程序博客网 时间:2024/06/04 19:04
浏览顺序:
main()函数->被调用函数。
关键函数只有十几行,细心浏览,祝君成功!
#include<stdio.h>#include<string.h>#include<assert.h>//在这里我们先演示int和字符串两中类型的冒泡排序void bubble_sort(void*data, int nums, int width, int(*cmp)(void*, void*));int int_cmp(void*num1, void*num2);int str_cmp(const void*num1, const void *num2);int main(){ int arr1[] = { 15, 1, 56, 6, 8, 6, 7, 5, 63, 5, 6 }; int arr2[] = { 'a', 'd', 'r,', 'm', 'g', 't', 'e', 'v', 'h', 'g', 'f', 'w', 'e', 'h' }; double arr3[] = { 1.2, 1.3, 2.3, 5.6, 1.0, 2.6, 7.8 }; /*定义字符指针数组arr4,即定义一个数组,数组的每个元素为一个指针, 该指针指向不同的字符串(指向一个个元素个数可以不同的字符数组,也就是指向不同的字符串) */ char *arr4[] = { "aaa", "cccc", "bbbbb" }; /*以上均为数组,求元素个数,求解类型一致*/ int sz1 = sizeof(arr1) / sizeof(arr1[0]); int sz2 = sizeof(arr2) / sizeof(arr2[0]); int sz3 = sizeof(arr3) / sizeof(arr3[0]); int sz4 = sizeof(arr4) / sizeof(arr4[0]); //打印排序前 for (int i = 0; i < sz1; i++) { printf("%d ", arr1[i]); } printf("\n"); //此处:bubble_sort函数第4个参数为函数指针,传参时,将相应类型的比较函数的地址赋给函数指针,进行函数调用 bubble_sort(arr1, sz1, sizeof(int), int_cmp); //打印排序后 for (int i = 0; i < sz1; i++) { printf("%d ", arr1[i]); } printf("\n"); for (int i = 0; i < sz4; i++) { puts(arr4[i]); } printf("\n"); bubble_sort(arr4, sz4, sizeof(char*), str_cmp); for (int i = 0; i < sz4; i++) { puts(arr4[i]); } printf("\n"); getchar(); return 0;}//void bubble_sort(void*data, int nums, int width, int(*cmp)(void*, void*)){ assert(data); int i; int j; for (i = 0; i < nums - 1; i++) { int flag = 0; char *start = (char*)data;//之所以可以排序任意类型,是因为进行交换一个不同数组元素时,全部转化为最小的char类型(*(char*)start) for (j = 0; j < nums - i - 1; j++) { if (cmp(start, start + width)<0) { //按照元素类型以最小类型char进行交换 for (int k = 0; k < width; k++) { start[k] ^= start[k + width]; start[k + width] ^= start[k]; start[k] ^= start[k + width]; } flag = 1; } start += width; } //添加flag,是为优化处理。当冒一次泡时,若没有发生交换,则直接跳出循环 if (!flag) { break; } }}int int_cmp(void*num1, void*num2){ return *(int *)num1 - *(int *)num2;}int float_cmp(const void*num1, const void*num2){ float ret = *(float*)num1 - *(float*)num2; if (ret == 0) { return 0; } else if (ret < 0) { return -1; } else { return 1; }}//字符比较函数int char_cmp(const void *num1, const void*num2){ return *(char *)num1 - *(char *)num2;}//字符串比较函数int str_cmp(const void*num1, const void *num2){ return strcmp(*(char**)num1, *(char **)num2);}
0 0
- 实现一个bubble_sort函数,可以完成int ,float,char,string类型的排序
- 自己实现一个bubble_sort(冒泡排序),可以完成不同类型数据的排序
- 自己完成一个冒泡排序(bubble_sort),可以完成不同类型数据的排序
- 一个函数将int,float,double等类型转string
- 实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数
- 【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- string,char,int类型的相互转换
- int,string,char*的类型转换
- C++中int,float,string,char*的转换(待续)
- int,double,char类型的排序
- int,string,char ,string,char*类型转换
- c++ CString string char* char int类型的相互转换
- 为何?用Linq排序的时候,int 类型字段可以...但是 float类型不行?何解? - CSDN论坛 - CSDN.NET
- CString 与int char* float 类型转换
- string, char*, int类型转换
- string, char*, int类型转换
- PHP常见运行模式
- 预排序遍历树算法(非递归无限极分类算法)
- 第四章 集群服务于负载均衡技术
- 使用utl_http获取某个http页面内容
- Servlet中几个listener源码
- 实现一个bubble_sort函数,可以完成int ,float,char,string类型的排序
- 设计模式之工厂模式
- 技术帮助文档
- 删除服务器 默认的apache2服务
- Linux局域网集群软件的安装(以JDK安装为例)
- 栈的应用---(中缀表达式 转 后缀表达式)
- 使用动态宏动态控制数据集的表名
- Mac安装MySQL
- Kafka学习笔记(三)