先上一段代码,冒泡排序随手写的,有问题自己改一改
#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;
}
这个函数指针当参数,实际上在开发过程中比较常见的,这样做可以兼容各种各样的结构体(正常结构体是没办法用大于小于比较的吧),只要写一个结构体比较的函数,然后当成函数指针传进去,这个排序算法就可以复用 |