【qsort学习及改造冒泡排序能排序任何数】

本文详细介绍了C语言中qsort函数的用法,以及如何利用其改造冒泡排序算法。qsort是一个通用的快速排序函数,通过函数指针进行自定义比较。同时,作者提供了冒泡排序的模拟实现,展示了两种排序方法的应用。
摘要由CSDN通过智能技术生成

qsort学习及改造冒泡排序能排序任何数

qsort的使用

这个函数也不是很复杂!!!
1
1
1
qsort(void*base,size_t num,size_t width,int(int (__cdecl *compare )(const void *elem1, const void *elem2 )))
void * base,为数组的基地址,size_t num为数组的元素个数,size_t width 元素的大小,也就是偏移量,int(int (__cdecl *compare )(const void *elem1, const void *elem2 ))这个是函数指针,用来接受函数的地址,elem1指向第一个比较元素的地址,elem2指向第二个比较元素的地址!!!

int cmp_int(const void* p1, const void* p2)
{
	return *(int*)p1 - *(int*)p2;
}

int main()
{
	int arr[10] = { 5,3,2,1,6,7,9,8,4,0 };
	int sz = sizeof(arr) / sizeof(int);
	qsort(arr, sz, sizeof(int), cmp_int);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}

1
下面模拟的通用的冒泡排序!!!

void Swap(char* buffer1, char* buffer2, size_t width)
{
	for (int i = 0; i < width; i++)
	{
		char tmp = *buffer1;
		*buffer1 = *buffer2;
		*buffer2 = tmp;
		buffer1++;
		buffer2++;
	}
}

void bubble_sort(void* base,size_t num,size_t width,int (*cmp)(const void* p1,const void* p2))
{
	for (int i = 0; i < num-1; i++)
	{
		for (int j = 0; j < num - 1 - i; j++)
		{
			//把每次比较的元素的首地址,传到p1和p2;
			if ((*cmp)((char*)(base)+j * width, (char*)(base)+(j + 1) * width) > 0) {
				//交换
				Swap((char*)(base)+j * width, (char*)(base)+(j + 1) * width,width);
			}
		}
	}
}

int cmp_int(const void* p1, const void* p2)
{
	return *(int*)p1 - *(int*)p2;
}

int main()
{
	int arr[10] = { 5,3,2,1,6,7,9,8,4,0 };
	int sz = sizeof(arr) / sizeof(int);
	bubble_sort(arr, sz,sizeof(int),cmp_int);
	for (int i = 0; i < sz; i++) {
		printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}

1

完结!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值