任意类型排序
来源:互联网 发布:dat文件导入数据库 编辑:程序博客网 时间:2024/05/16 19:47
模拟qsort()函数,实现任意类型排序:
qsort()简介:
原型:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 )
base:要排序的的数组的首地址
num:要排序的元素的个数
width:元素所占的字节数
compare:函数指针,指向排序方式这个函数的指针。其中比较方式这个函数需要用户根据自己的需要
使用qsort要调用<stdlib.h>。
实现:
#include<stdio.h>#include<stdlib.h>int compare(const void *elem1, const void *elem2) //比较方式{const int *str1 = (const int *)elem1;const int *str2 = (const int *)elem2;return *str1>*str2; //">"升序,“<"降序}void sort(void *base, size_t num,size_t byte, int(*cmp)(const void *elem1, const *elem2)){char *str = (char *)base;int flag = 0;const void *p1;const void *p2;for (size_t i = 0; i < num - 1; i++){flag = 0;for (size_t j = 0; j < num - 1 - i; j++){ p1 =(const void *)(str+(j*byte)); p2 = (const void *)(str+(j + 1)*byte); if (cmp(p1,p2)) { for (size_t k = 0; k < byte; k++) //按字节交换 {str[j*byte + k] = str[j*byte + k] + str[(j + 1)*byte + k];str[(j+1)*byte + k] = str[j*byte + k] - str[(j + 1)*byte + k];str[j*byte + k] = str[j*byte + k]-str[(j + 1)*byte + k]; } flag = 1;}}if (!flag)break;}}int main(){int(*cmp)(const void *elem1, const *elem2)=compare;int arr[4] = { 20,40,5, 4 };sort(arr,4,4, cmp);for (int i = 0; i < 4; i++){printf("%d ", arr[i]);}printf("\n");system("pause");return 0;}
0 0
- 任意类型排序
- 任意类型通用的qsort冒泡排序
- 任意类型类Any
- C++ 任意类型Any
- Go语言:使用sort包对任意类型元素的集合进行排序
- 使用回调实现对一组任意类型的对象做快速排序
- 页面任意排序
- 任意排序几个数
- 任意范围,任意类型的随机数生成器
- 生成任意内容任意类型的文件
- 冒泡排序函数,可以给任意类型的数据排序,比如整形数组,字符数组,字符串数组等
- 下载任意类型的文件
- ChartWizard 添加任意类型图表
- OGRE中的任意类型Any
- 把任意类型转成Boolean
- OGRE中的任意类型 Any
- 任意类型转换成json
- any-----安全存储任意类型
- python2.7 模块全局__metaclass__
- mysql 设置密码
- 默认构造函数
- 注解之@RequestMapping和@RequestBody
- PAT-B 1045. 快速排序
- 任意类型排序
- 笔记
- 《Linux驱动》混杂设备与设备节点
- 实时 Java 社区论坛:Sym
- 线性结构栈----动态实现
- on my zsh 安装
- Hello Gradle
- 防抖算法小结
- Java调用DLL