任意类型排序
2016-05-02 13:09
302 查看
模拟qsort()函数,实现任意类型排序:
qsort()简介:
原型:
num:要排序的元素的个数
width:元素所占的字节数
compare:函数指针,指向排序方式这个函数的指针。其中比较方式这个函数需要用户根据自己的需要
使用qsort要调用<stdlib.h>。
实现:
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; }
相关文章推荐
- Transformation 能将 Windows XP/Server 2003 操作系统,完美地模拟成 Windows Vista 的软件
- 用javascript和css模拟select的脚本
- PHP模拟asp.net的StringBuilder类实现方法
- C#使用ImitateLogin模拟登录百度
- javascript用层模拟可移动的小窗口
- JS模拟简易滚动条效果代码(附demo源码)
- 自编jQuery插件实现模拟alert和confirm
- JS模拟按钮点击功能的方法
- PHP模拟asp中response类实现方法
- 模拟Spring的简单实现
- javascript 模拟点击广告
- JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
- php实现模拟post请求用法实例
- JavaScript实现MIPS乘法模拟的方法
- 模拟xcopy的函数
- JS模拟实现Select效果代码
- php模拟服务器实现autoindex效果的方法
- C# SendInput 模拟鼠标操作的实现方法
- PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
- C语言中qsort函数用法实例小结