写一个冒泡排序模拟qsort()函数,但是结果不正确。我已检查了代码,并对比了网上的代码,没有发现问题所在。求解答!
//模仿qsort()函数实现一个冒泡排序的通用算法
void swap(char* a, char* b, int size)
{
for (int i = 0; i < size; i++)
{
char tmp = *a;
*b = *a;
*a = tmp;
a++;
b++;
}
}
void bubble_sort(void* base, int num, int size, int (*cmp)(const void* e1, const void* e2))
{
for (int i = 0; i < num - 1; i++)
{
for (int j = 0; j < num - 1 - j; j++)
{
if (cmp((char*)base + j * size, (char*)base + (j + 1) * size) > 0)
{
swap((char*)base + j * size, (char*)base + (j + 1) * size, size);
}
}
}
}
void print(int arr[], int num)
{
for (int i = 0; i < num; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int cmp(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
int main()
{
int arr[] = { 21, 19, 88, 78, 18, 19, 93, 60, 79, 91, };
int num = sizeof(arr) / sizeof(arr[0]);
print(arr, num);
bubble_sort(arr, num, sizeof(int), cmp);
print(arr, num);
return 0;
}