使用回调函数,模拟实现 qsort (采用冒泡排序法)

问题描述:

对回调函数进行简单运用;

模拟实现 qsort ;

采用冒泡排序法。

问题描述:

1、定义数组,初始化要排序的数,并打印数组;

2、调用 bubble 函数;

3、调用 int_cmp 函数进行比较两个数大小,然后调用 _swap 函数进行交换两个数的值;

4、完成排序,打印排序后数组。

源代码:

#include<stdio.h>
#include<windows.h>

static int int_cmp(void *x, void *y)
{
	return *((int *)x) > *((int *)y);
}

static void swap(void *x, void *y, int size)
{
	char *p = (char*)x;
	char *q = (char*)y;
	while (size--)
	{
		*q ^= *p;
		*p ^= *q;
		*q ^= *p;
		p++;
		q++;
	}
}

void mySort(void *arr, int count, int size, int(*cmp)(void *, void*))
{
	int i = 0;
	int j = 0;
	int flag = 0;
	for (; i<count - 1; i++)
	{
		flag = 0;
		for (j = 0; j<count - 1 - i; j++)
		{
			if (cmp((char*)arr + j*size, (char*)arr + (j + 1)*size) > 0)
			{
				flag = 1;
				swap((char*)arr + j*size, (char*)arr + (j + 1)*size, size);
			}
		}
		if (flag == 0)
		{
			return 0;
		}
	}
}

int main()
{
	int i = 0;
	int arr[] = { 3, 21, 4, 21, 23, 1, 125, 1, 0,3 };
	int size = sizeof(arr) / sizeof(arr[0]);
	mySort(arr, size, sizeof(int), int_cmp);
	for (; i <size; i++)
	{
		printf("%d  ", arr[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}
发布了83 篇原创文章 · 获赞 26 · 访问量 8724

猜你喜欢

转载自blog.csdn.net/lexiaoyao_0000/article/details/90767045