用c实现qsort函数 ,冒泡排序

qsort:函数的原型

void qsort( void *base, size_t num,size_t width,int ( *compare )(const void *elem1, const void *elem2 ) );
size_t width: sizeof(int)

冒泡排序:
base:代表你要排序的数据
num:是排序数据的总数
size:要排序数据的字节大小
int ( *p )(const void *p1, const void *p2 )
函数指针

#include  <stdio.h>

int _cmpInt(const void *p1, const void *p2) //比较p1和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 强转    让字节为1
		*(((char *)p1) + i) = *(((char *)p2) + i);
		*(((char *)p2) + i) = tmp;
	}
}

void MyQsort(void *base, int len, int  size,int(*cmp)(const void *p1, const void *p2))//cmp函数 _cmpInt
{
	//冒泡排序
	int i = 0;//趟数
	for (i = 0; i < len - 1; i++)
	{
		int j = 0;//次数
		for (j = 0; j < len - 1 - i; j++)
		{
					if (cmp((char *)base + j*size,(char *)base + (j + 1)*size) > 0)
			{
				
				_swap((char *)base + j*size,(char *)base + (j + 1)*size, size);
				//交换   一个字节一个字节进行交换
			}
		}
	}
}

int main()
{
	 int arr[] = { 12, 6, 3, 1, 9, 7, 2, 5, 19, 5 };
	//char *arr[] = { 'a','b','d','c' };
	int i = 0;
	int len = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < len; i++)
	{
		printf("%c  ", arr[i]);
	}
	printf("\n");
	MyQsort(arr, len, sizeof(int), _cmpInt);
	for (i = 0; i < len; i++)
	{
		printf("%c  ", arr[i]);
	}
	printf("\n");
	return 0;
}
发布了24 篇原创文章 · 获赞 1 · 访问量 389

猜你喜欢

转载自blog.csdn.net/weixin_43519514/article/details/102517412
今日推荐