scwp(char* b1,char* b2,int width)
{
	int i = 0;
	for (i = 0; i < width; i++)
	{
			char tmp = *b1;
			*b1 = *b2;
			*b2 = tmp;
			b1++;
			b2++;
	}
}
my_qsort(void* base,int sz,int width,int (*cmp)(const void* e1,const void* e2))
{
	int i = 0;
	int j = 0;
	for (i = 0; i < sz-1; i++)
	{
		for (j = 0; j <sz-i-1 ; j++)
		{
			if (cmp((char*)base + j*width,(char*)base + (j + 1)*width) > 0)
			{
				scwp((char*)base + j*width, (char*)base + (j + 1)*width, width);
			}
		}
	}
}
int cmp_int(const void* e1,const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}
int cmp_char(const void* e1, const void* e2)
{

	return *(char*)e1 - *(char*)e2;
}
void text1()
{
	int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
	//printf("%d ", arr[0]);
	int sz = sizeof(arr) / sizeof(arr[0]);

	my_qsort(arr, sz, sizeof(arr[0]), cmp_int);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");

}
void text2()
{
	char arr[] = { 'f', 'e', 'd', 'c', 'b' ,'a'};
	//printf("%d ", arr[0]);
	int sz = sizeof(arr) / sizeof(arr[0]);

	my_qsort(arr, sz, sizeof(arr[0]), cmp_char);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%c ", arr[i]);
	}
	printf("\n");
}
int main()
{
	text1();
	text2();
	return 0;
}

自己的任意类型排序函数。