13得票5回答
在Haskell中,使用par能否加速快速排序?

我有一个看似微不足道的并行快速排序实现,代码如下:import System.Random import Control.Parallel import Data.List quicksort :: Ord a => [a] -> [a] quicksort xs = pQuic...

13得票6回答
基于快速排序分区的概率

我遇到了这个问题: 设0<α<.5是某个常数(与输入数组长度n无关)。回想一下在课堂上讲解的快速排序算法中使用的Partition子例程。在随机选择主元素的情况下,Partition子例程产生子数组中较小的那个的大小≥α倍于原始数组大小的概率是多少?Its answer is 1...

13得票3回答
为什么在平均情况下,快速排序比其他排序算法更快?

众所周知,快速排序的平均性能为O(n*log(n)),而归并排序和堆排序的平均性能也是O(n*log(n))。那么问题来了,为什么快速排序平均情况下更快呢?

13得票6回答
可中断的原地排序算法

我需要用C语言编写一个排序程序,并希望能够原地排序以节省磁盘空间。这是有价值的数据,因此我需要确保如果进程被中断(使用ctrl-c),文件不会损坏。我可以保证机器的电源线不会被拔掉。 额外的细节:文件大小约为40GB,每个记录为128位,机器为64位,操作系统为POSIX。 您有什么关于完...

13得票3回答
选择最佳中位数的方法 - 3个元素块 vs 5个元素块?

我正在基于选择算法实现一个快速排序变体,用于选择良好的枢轴元素。传统智慧似乎是将数组分为5个元素的块,取每个块的中位数,然后递归地应用相同的块处理方法来获取“中位数的中位数”。 令我困惑的是选择5个元素的块而不是3个元素的块。使用5个元素的块,似乎你执行了n/4 = n/5 + n/25 +...

12得票4回答
C语言中的并行快速排序

在寻找C语言中的并行快速排序实现时,我决定亲自动手编写(我需要对大约一百万个文本字符串数组进行排序)。目前我发现的所有实现都是在qsort函数内部划分工作量,这会在每个线程中分区时产生大量开销。 将这100万个字符串按照线程数(在我的情况下为24个线程)进行分割并让它们各自处理一个部分,然后...

12得票4回答
快速排序的奇怪时间复杂度,c++

我一直在测试不同排序算法对于不同数列的时间复杂度,一切都进行得很顺利,直到我得到了快速排序(以中间值为基准)对于一个前一半是升序,后一半是降序的数列的结果,图形如下: (在“V”代表的序列中,前一半是降序,后一半是升序,“A”代表的序列中,前一半是升序,后一半是降序。) 其他种类的数列...

12得票3回答
为什么归并排序对于链表更好?

在对列表进行排序时,为什么归并排序被认为是"正确的选择"而不是快速排序?我听过在线讲座中提到这个问题,并在几个网站上看到它。

12得票6回答
归并排序究竟要进行多少次比较?

我了解到,在实践中快速排序比归并排序的速度更快,原因是由于快速排序有一个隐藏常数。 对于随机化快排复杂度的解决方案是2nlnn=1.39nlogn,这意味着快速排序中的常数是1.39。 那么归并排序呢?归并排序中的常数是多少?

11得票4回答
以中间元素为枢轴的快速排序

我的理解是快速排序:选择一个枢轴元素(在这种情况下,我选择中间元素作为枢轴)在两端初始化左右指针。找到第一个大于枢轴的元素来自枢轴的左侧。同样,在枢轴右侧找到第一个比枢轴小的元素。交换3和4中找到的元素。重复执行3,4,5直到左指针>=右指针。对左右子数组重复上述步骤,因为枢轴现在已经放置到其...