使用冒泡排序模仿Qsort函数对不同数据排序
来源:互联网 发布:淘宝分享怎么查看 编辑:程序博客网 时间:2024/06/02 03:36
使用冒泡排序作为排序核心,模仿Qsort函数,对不同类型数组进行排序。
默认是对指针数组排序,如果想看其他的数组,在主函数进行修改即可。求长度,输出函数里改成对应数组名,Bubble()函数最后一个参数改成对应比较方法的函数,即可看到你想要的排序结果.
你所不理解的都在注释里面,如果还有些不理解的话,欢迎评论区留言或私信。
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include<stdlib.h>#include <string.h>int CmpStr(void *p1, void *p2)//字符串比较{ return strcmp(*(char **)p1, *(char**)p2);//强转成二级字符指针,这样解一级引用还是指针,这样就可取得4个字节的内容即是取得第数组一个元素的全部地址取得的地址就是整个字符串首元素地址,传入strcm函数进行比较。}int CmpNum(void *p1, void *p2)//整型数字比较{ int a = *(int*)p1; int b = *(int*)p2; return a > b ? 1 : a < b ? -1 : 0;}int CmpCh(void *p1, void *p2)//字符比较{ return *((char*)p1) - *((char*)p2);}int CmpFL(void *p1, void *p2)//单精度浮点数字比较{ float a = *(float*)p1; float b = *(float*)p2; return a > b ? 1 : a < b ? -1 : 0;}void Swap(void *p1, void *p2, int size){ char tmp; int i = 0; while (i < size)//将变量的每一字节进行交换 { tmp = *(char *)p1; *(char *)p1 = *(char *)p2; *(char *)p2 = tmp; ((char *)p1)++; ((char *)p2)++; i++; }}void Bubble(void *ptr, int ele_num, int type_len, int(*cmp)(void *, void *))//void*型指针保证类型的兼容性,传入什么类型都可以进行排序在内部,将指针转成char*类型,是的每一字节进行交换,使得不必考虑虑参数类型{ int i = 0; int j = 0; int flag = 0;//有序标记 for (i = 0; i < ele_num - 1; i++) { flag = 0; for (j = 0; j < ele_num - 1 - i; j++) {//针对指针数组来说,存放的地址转换成用char*类型指针读取,读取只读取1个字节的内容,第二个参数加类型长度,指向数组下一个元素地址,也只读取一个字节内容 if (cmp((char *)ptr + j * type_len, (char *)ptr + (j + 1) * type_len) > 0) {//同理Swap函数,针对指针数组来说,转成char类型指针,交换的是一个字节的内容,并没有一次性交换4字节(整个字符串首元素)的地址 Swap((char *)ptr + j * type_len, (char *)ptr + (j + 1) * type_len, type_len); flag = 1;//进行一次排序,flag置为1,表示该序列本身不是有序的 } } if (0 == flag)//第一次循环,没有进行一次交换,表示序列本身就是有序的 { return; } }}int main(){ char *p[] = { "gabc","zbcd", "iyryr", "qeqw","nmczn","popop" };//记住,这是一个指针数组,是一个存放指针的数组,而不是指针 //int num[] = { 123,567,890,2342,6466 }; //char ch[] = { 'b','g','p','a','u' }; //float fL[] = { 7.4f,7.6f,9.4f,3.2f,1.1f };//若不加f会报double到float截断,因为系统默认是double型 int i = 0; int length = sizeof(p) / sizeof(p[0]); Bubble(p, length, sizeof(char*), CmpStr);//字符串数组排序 //Bubble(num, length, sizeof(int), CmpNum);//整型数字排序 //Bubble(ch, length, sizeof(char), CmpCh);//字符排序 //Bubble(fL, length, sizeof(float), CmpFL);//单精度浮点数排序 while (i<length) { printf("%s\n", p[i]); i++; } return 0;}
阅读全文
0 0
- 使用冒泡排序模仿Qsort函数对不同数据排序
- 使用qsort函数排序各类型数据
- 模仿qsort的功能实现一个通用的冒泡排序。
- 利用冒泡排序法模拟qsort函数
- 用冒泡排序法实现qsort函数
- 模仿qsort()实现一个通用的排序函数:msort()
- 模仿qsort() 实现一个通用排序函数:msort()
- qsort对字符串排序
- 【C】模仿 qsort 的功能实现一个通用的冒泡排序
- 用冒泡排序的方法模拟实现qsort函数
- 仿照qsort函数的形式编写简单选择排序,冒泡排序,希尔排序函数
- qsort()排序函数
- 排序函数QSORT
- qsort()排序函数
- 排序之qsort函数
- qsort()排序函数
- qsort(),sort()排序函数
- 快速排序函数qsort
- Hadoop 改了配置文件yarn-site.xml不生效,Container killed处理办法,vi出现 found a swap处理
- idea中通过maven创建web项目
- MAC下启动和停止jenkins的方式
- tomcat服务器配置字符集为utf-8-彻底解决中文乱码问题
- 设计模式--策略模式
- 使用冒泡排序模仿Qsort函数对不同数据排序
- 遍历节点
- Linux笔记_1_文件系统与权限管理&部分常用命令
- POJ1836-Alignment(最长上升子序列)
- Jamie's Contact Groups (二分图多重匹配)
- 设计模式--模板模式
- linux使用与学习
- C++中 #ifndef #define #endif
- [App] WildFly + apache-maven + quickstart