冒泡排序模拟qsort()函数

写一个冒泡排序模拟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;
}

运行结果及报错内容

img

你可以看我博客,我博客里刚好有这篇。讲的应该还是比较详细的

for (int j = 0; j < num - 1 - j; j++)
j < num - 1 - j 是 - i吧?

swap不是交换两个数吗

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^