#include <stdio.h>
#include <string.h>
int cmp_int(const void *e1, const void *e2)//整形数组元素比较e1>e2返回值大于0,e1<e2返回值小于0
{
return (*(int *)e1) - (*(int *)e2);
}
int cmp_str(const void* e1, const void *e2)//字符串比较不能直接加减要用字符串比较函数
{
return strcmp((char*)(*(int *)e1),(char*)(*(int *)e2));
}
void swap(char *p1, char *p2, int sz)//交换次序
{
char tmp = 0;
int i =0;
for (i=0; i<sz; i++)
{
tmp = *(p1+i);
*(p1+i) = *(p2+i);
*(p2+i) = tmp;
}
}
void bubble_int_str(void *base, int size, int width,int (*cmp)(const void *e1, const void *e2 ))//冒泡排序
//base数组起始位置size数组的长度width类型的大小,第四个是一个函数指针指向比较函数
{
int i =0;
int j = 0;
for (i=0; i<size-1; i++)
{
for (j=0; j<size-i-1; j++)
{
if (cmp((char *) base + j*width , (char *)base + (j+ 1)*width) > 0)
{
swap(( char *)base + j*width, (char *)base + (j +1)*width, width);
}
}
}
}
int main()
{
int i =0;
int a[] = {6,8,9,5,4,2,3,1,0};
char *b[] = {"zhangsan","lisi","wangwu"};
int sz_int = sizeof(a)/sizeof(a[0]);
int sz_char = sizeof(b)/sizeof(b[0]);
bubble_int_str(a, sz_int,sizeof(a[0]), cmp_int);//整形数组的冒泡排序
for(i=0; i<sz_int; i++)
{
printf("%d ",a[i]);
}
printf("\n");
bubble_int_str(b, sz_char, sizeof(b[0]), cmp_str);//字符数组的冒泡排序
for(i=0; i<sz_char; i++)
{
printf("%s ",b[i]);
}
return 0;
}
这段代码可实现整形数组和字符串数组的冒泡排序,利用了回调函数的思想,把函数指针作为一个参数,输出结果为:利用回调函数实现通用冒泡排序
最新推荐文章于 2024-05-09 20:56:37 发布