利用回调函数实现通用冒泡排序

本文介绍了一个使用C语言实现的冒泡排序算法示例,该示例通过回调函数的方式实现了对整型数组和字符串数组的排序。文章展示了如何定义比较函数和交换函数,并通过函数指针传递给排序函数来完成不同数据类型的排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
}
这段代码可实现整形数组和字符串数组的冒泡排序,利用了回调函数的思想,把函数指针作为一个参数,输出结果为:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值