c - 快速排序效果不佳

标签 c algorithm quicksort

我曾尝试使用一本书中的伪代码(看起来像维基百科中的伪代码)来实现快速排序,但我无法让它工作。

此源代码:

int partitionare(int a[], int n, int p, int r)
{
   int x, i, j, aux;
   x = a[r]; // pivot
   i = p - 1;
   for (j = p; j < r; j++)
   {
       if (a[j] <= x)
       {
           i++;
           aux = a[j];
           a[j] = a[i];
           a[i] = aux;
        }   
   }
   aux = a[i + 1];
   a[i + 1] = a[r];
   a[r] = aux;
   return i + 1;
}
void quicksort(int a[], int n, int p, int r)
{
    if (p < r)
    {
       int q = partitionare(a, n, p, r);
       partitionare(a, n, p, q - 1);
       partitionare(a, n, q + 1, r);
    }
}

其中 p 和 r 是数组的开头和结尾

调用函数:

quicksort(a, n, 0, n-1);

不要介意第二个参数 n。这仅用于测试目的。

最佳答案

根据Wikipedia article函数 quicksort() 中的最后一次调用是递归地调用自身(而不是函数 partition())

void quicksort(int a[], int n, int p, int r)
{
    if (p < r)
    {
       int q = partitionare(a, n, p, r);
       partitionare(a, n, p, q - 1);     /* recursive quicksort() here */
       partitionare(a, n, q + 1, r);     /* recursive quicksort() here */
    }
}

关于c - 快速排序效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36113726/

相关文章:

c - 数字字符串上的 STRCMP

algorithm - 检查一个矩形是否平分另一个矩形

algorithm - 代码的最坏情况时间复杂度

c++ - STL 排序进入无限循环?

c - 快速排序的问题

c++ - C 简单 RingBuffer - 多线程 - 查找关键部分

c - tcc:在汇编代码中使用 C 标准函数

c - 链接未找到的系统库,因为没有 libuuid.so 只有 libuuid.so.1

algorithm - 报告整数数组中的所有缺失数字(以二进制表示)

javascript - 如何使用事件驱动比较编写 QuickSort?