26得票5回答
有人见过这种快速排序的改进方法吗?

处理快速排序中重复元素 我找到了一种更有效地处理快速排序中重复元素的方法,想知道是否有人见过这样做。 该方法大大减少了检查重复元素所需的开销,从而提高了带或不带重复元素时的性能。通常,有几种不同的方法来处理重复元素,首先我将列举它们。 第一种是荷兰国旗算法,它将数组排序为[ < p...

26得票9回答
多线程快速排序或归并排序

如何在Java中实现并发的快速排序或归并排序算法?我们在一台拥有16个(虚拟)内核的Mac上遇到了问题,使用默认的Java排序算法只有一个内核在工作!看到这部非常好的机器完全未被充分利用真是令人不爽。所以我们自己写了一个(我写的),确实获得了很好的加速效果(我编写了一个多线程快速排序,由于其分...

26得票4回答
快速排序:迭代还是递归

我学到了快速排序以及它如何在递归和迭代方法中实现。 在迭代方法中: 0. 将范围(0...n)压入栈中 1. 使用一个枢轴对给定数组进行分区 2. 弹出栈顶元素 3. 如果范围中有多于一个元素,则将分区(索引范围)推入栈中 4. 重复上述3个步骤,直到栈为空 而递归版本是在维基百科中定义...

25得票6回答
如何优化快速排序算法

我正在尝试编写一个高效的快速排序算法。它运行得还不错,但是在元素数量巨大且某些数组部分已经预先排序的情况下,运行时间会变长。我在维基百科上查找了快速排序文章,发现以下内容: 为确保最多只使用O(log N)的空间,首先递归到数组较小的一半,并使用尾递归进入另一半。 对于这种小数组(即长度小...

23得票5回答
随机中位数快排比随机快排表现更好吗?

我刚刚回答了一个关于在快速排序实现中选择分区的不同方法的问题,然后遇到了一个问题,我真的不知道如何回答。这有点数学重,这可能不是提问的正确网站,所以如果需要移动,请告诉我,我会很乐意将其迁移到其他地方。 众所周知,随机选择枢轴的快速排序实现最终将在预期的O(n lg n)时间内运行(在维基百...

22得票8回答
快速排序划分方法的稳定性

以下是快速排序的划分算法,它是否产生稳定的排序(即是否维护相等值元素的相对位置):这个问题 partition(A,p,r) { x=A[r]; i=p-1; for j=p to r-1 if(A[j]<=x) i+...

21得票15回答
快速排序比归并排序慢吗?

昨天我在实现快速排序算法,然后我运行它,期望它比归并排序(我也实现了)有更快的运行时间。我运行了这两种算法,虽然快速排序在小数据集<100个元素时更快(我确保它是可行的),但归并排序很快就成为了更快的算法。我被教导快速排序几乎总是比归并排序“更快”,我知道这个话题存在一些争议,但我至少预...

20得票7回答
实现快速排序算法

我从这本书中找到了快速排序算法 这就是算法QUICKSORT (A, p, r) if p < r q = PARTITION(A, p, r) QUICKSORT(A, p, q-1) QUICKSORT(A, q+1, r) PARTITION(A, ...

20得票6回答
使用尾递归的优势是什么?

我一直在阅读关于如何通过使用尾递归版本来减少快速排序的空间复杂度的文章,但我无法理解这是如何实现的。以下是两个版本: QUICKSORT(A, p, r) q = PARTITION(A, p, r) QUICKSORT(A, p, q-1) QUI...

19得票3回答
快速排序算法是否能更快地排序较大的数字?

我在玩Python时尝试练习我的排序算法,并发现了一些有趣的东西。 我有三个不同的数据片段: x = 需要排序的数字数量 y = 数字范围(所有随机生成的整数) z = 排序所需总时间 当: x = 100000,且 y = (0,100000) 时, z = 0.941820...