c - 这个快速排序有什么问题吗?

标签 c algorithm recursion quicksort

快速排序。代码是用纯 C 语言编写的。这个算法实现有什么问题吗?

void quick_sort(void *base, size_t num, size_t size, int (*comp)(const void*, const void*)) {
    unsigned int i = 0, j = num-1;
    int rpos = rand() % num;
    do {
        while(comp((char*)base + size*i, (char*)base + rpos*size) < 0) i++;
        while(comp((char*)base + size*j, (char*)base + rpos*size) > 0) j--;
        if (i <= j) swap((char*)base + size*i++, (char*)base + size*j--, size);
    } while (i <= j);
    if (i < num) quick_sort((char*)base, j, size, comp);
    if (j > 0) quick_sort((char*)base + size*i, num - i, size, comp);
}

陷入无限递归。

最佳答案

应该有 if(i<=j) swap 和 do 。 。 。 while(i<=j) 不仅仅是 (i < j )。并且交换后还需要增加 i 并减少 j。

http://www.algolist.net/Algorithms/Sorting/Quicksort有示例代码非常容易理解:)

关于c - 这个快速排序有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22102202/

相关文章:

c - Xcode 4.3中getline c函数的实现在哪里?

c++ - 读取原始数据文件,在 Matlab 和 C++ 中获取不同的值

c - 使用 sendto 时参数无效

c++ - 如何找到 2 组的交集?

algorithm - 使用Python和DFS算法的递归深度问题

c - 不熟悉的 C 简写 { }

c - 如何提高这个程序的执行时间?

sql - 如何在sql中查找几乎相似的记录?

javascript - 递归循环数组并返回项目数?

JavaScript 递归将列表格式从 XML 转换为 HTML