使用冒泡排序和回调函数模拟实现qsort函数

qsort函数是一个快速排序函数,在stdlib.h文件中定义,函数原型为viod qsort(void* base, size_t nelem,size_t width,int(*Comp)(const void* ,const void*));*base为要排序的数组名,nelem
为要排序数组的长度,width为数组元素的大小(一字节为单位)默认是从小到大排序的,
(*Comp)(const void* p1,const void*p2)是自定义的判断大小的指针。

Comp函数的返回值在qsort说明:

<0 p1将被排在p2前面
0 p1等于p2
>0 p1将被排在p2后面

使用回调函数,模拟实现qsort(采用冒泡的方式)。

//自定义的比较函数
int int_cmp(const void* p1, const void* p2)
{
	return(*(int*)p1 - *(int*)p2);
}

//按字节交换函数
void _swap(void* p1, void* p2, int size)
{
	int i = 0;
	for (i = 0; i<size; i++)
	{
		char tmp = *((char*)p1 + i);
		*((char*)p1 + i) = *((char*)p2 + i);
		*((char*)p2 + i) = tmp;
	}
}

//使用冒泡排序模拟qsort
void bubble(void* base, int count, int size, int(*cmp)(void*, void*))
{
	int i = 0;
	int j = 0;
	for (i = 0; i<count - 1; i++)
	{
		for (j = 0; j<count - i - 1; j++)
		{
			if (cmp((char*)base + j*size, (char*)base + (j + 1)*size)>0)
			{
				_swap((char*)base + j*size, (char*)base + (j + 1)*size, size);
			}
		}
	}
}

先前有错误,已修改。

发布了25 篇原创文章 · 获赞 4 · 访问量 2550

猜你喜欢

转载自blog.csdn.net/qq_43167575/article/details/84351011