在算法导论的第p169页中,讨论了使用尾递归实现Quicksort的方法。 本章早期介绍的原始Quicksort算法(伪代码如下): Quicksort(A, p, r) { if (p < r) { q: <- Partition(A, p, r) Quickso...
我正在编写一个程序,将会读取一个包含5,163个名字的文本文件(可以在这里看到该文本文件)。 然后我想把这些名字存储到一个名为“names”的列表中,之后,我将根据名字包含的字母数量对列表进行排序,较短的名字位于列表的开头,较长的名字位于列表的末尾。 我使用快速排序算法对列表进行排序,但运...
我在某些情况下产生了严重的疑虑和偏执,想知道使用快速排序算法是否会成为应用程序中的安全风险。 它的基本实现以及改进版本(如3-中值快排)具有行为异常的特点,这意味着它们对于某些输入数据的运行时间可能会极大地增加(具有O(n^2)的复杂度),更不用说可能出现堆栈溢出的情况。 因此,如果向一个...
快速排序通常被描述为一种就地(in-place)算法,尽管它需要O(log n)的堆栈空间。那么,就地是指“需要少于O(n)的额外空间”,还是堆栈空间通常不计入空间复杂度(但为什么会这样呢?),或者说快速排序实际上不是一种就地算法?
我正在比较Julia和C++的性能。然后我发现,在Julia中,快速排序比C++更快,尤其是当数组大小非常大时。 有人可以解释原因吗? quickSort.jlinclude("../dimension.jl") function execute() n = g...
我最近在C#中实现了一个快速排序算法。对于包含数百万项的整数数组进行排序,该代码的性能大约比.NET的实现慢了10%。 private static void QS(int[] arr, int left, int right) { if (left >= right) ret...
我实现了快速排序算法三次,并测量了对5000万个随机数进行排序所需的时间: 1. 顺序排序(大约需要14秒) 2. 在相同方法中使用Parallel.Invoke()(大约需要12秒) 3. 在单独的方法中使用Parallel.Invoke()(大约需要7秒) 因此,我的问题是:为什么如果...