|
发表于 2017-12-16 12:25:04
|
显示全部楼层
本楼为最佳答案
先上一段代码,冒泡排序随手写的,有问题自己改一改
- #include <stdio.h>
- typedef int (*PFN_CMP)(void*, void*);
- int cmp(void *n1, void *n2)
- {
- return n1 > n2 ? 1 : (n1 < n2 ? -1 : 0);
- }
- void sort(void **pAry, int nCount, PFN_CMP pfnCmp)
- {
- for (int i = 1; i < nCount - 1; i++)
- {
- for (int j = 0; j < nCount - i; j++)
- {
- if (pfnCmp(pAry[j], pAry[j + 1]) > 0)
- {
- void *pTmp = pAry[j];
- pAry[j] = pAry[j + 1];
- pAry[j + 1] = pTmp;
- }
- }
- }
- }
- int main(int argc, char *argv[])
- {
- int num[5] = { 1, 4, 3, 5, 2 };
- sort((void**)num, sizeof(num) / sizeof(num[0]), cmp);
- for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++)
- {
- printf("%d\t", num[i]);
- }
- return 0;
- }
复制代码
这个函数指针当参数,实际上在开发过程中比较常见的,这样做可以兼容各种各样的结构体(正常结构体是没办法用大于小于比较的吧),只要写一个结构体比较的函数,然后当成函数指针传进去,这个排序算法就可以复用 |
|