216得票12回答
如何最快地对10个32位数字进行排序?

我正在解决一个问题,涉及快速排序10个数字(int32)。我的应用程序需要尽可能快地对10个数字进行数百万次的排序。我正在对数十亿个元素的数据集进行抽样,每次需要从中选择10个数字(简化),并对它们进行排序(并从排序后的10个元素列表中得出结论)。 目前我正在使用插入排序,但我想我可以为我的特...

142得票23回答
插入排序与选择排序

我正在试图理解插入排序和选择排序之间的区别。 它们似乎都有两个组成部分:一个未排序的子列表和一个已排序的子列表。它们似乎都从未排序的子列表中取出一个元素,并将其放入已排序列表的适当位置。我看到一些网站/书籍说选择排序通过一次交换一对元素来实现这一点,而插入排序则只是找到正确的位置并插入。然而...

73得票7回答
如何在已排序的向量中插入值?

大家好, 这个问题是之前的 这个问题 的延续。我认为STL缺少了这个功能,但这只是我的个人意见。 现在,进入正题。 考虑下面的代码:class Foo { public: Foo(); int paramA, paramB; std::string name; }...

34得票6回答
插入排序为什么比快速排序更适用于少量元素的列表?

插入排序不是O(n^2)比快速排序的O(n log n)更慢吗?...所以对于小规模的n,它们之间的关系不是相同的吗?

28得票4回答
为什么插入排序在平均情况下的时间复杂度为Θ(n^2)?

插入排序的运行时间在输入数据已经排序的情况下为Ω(n),在输入数据为逆序的情况下为O(n2),平均情况下它的运行时间为Θ(n2)。 为什么会这样呢?例如,为什么平均情况不更接近于O(n log n)呢?

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

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

24得票5回答
二分插入排序

在实现插入排序时,可以使用二分查找来定位数组的前i-1个元素中应将第i个元素插入到哪个位置。 这会如何影响所需的比较次数?使用这样的二分查找会如何影响插入排序的渐进运行时间? 我相当确定这会减少比较次数,但我不确定为什么。

15得票1回答
对于输入大小为n,哪些n值下插入排序会胜过归并排序?

在《算法导论》(Corman)一书中,练习1.2-2提出了关于比较插入排序和归并排序实现的问题。对于输入大小为n,插入排序运行了8n^2次步骤,而归并排序运行了64n lg n次步骤; 对于哪些n值,插入排序能够击败归并排序? 虽然我对答案很感兴趣,但我更想知道如何逐步找到答案(以便我可以重...

14得票1回答
向已排序的向量中插入元素并保持元素排序

我有一个向量,希望在任何时候都对元素进行排序。当我插入一个元素并在弹出它们时保持元素排序,应该如何处理?我查看了 std::lower_bound,但那与我想要的相反。 例如,这就是我想要的:当我弹出向量中的所有元素时,它应该是 1 2 3 4 5。这意味着向量必须将它们存储为 5 4 3 ...

12得票7回答
无法正确理解《算法导论》第三版中插入排序的方法。我犯了哪些思维错误?

我正在阅读《算法导论》第三版,书中介绍了插入排序。在第18页上有一些伪代码: A = {5, 2, 4, 6, 1, 3}; INSERTION-SORT(A) 1 for j = 2 to A.length 2 key = A[j] 4 i = j - 1 5 while ...