8得票4回答
如何从几乎已排序的链表中分离出错位的元素?

我是一个几乎排过序的链表,至少包含两个元素,这些元素都是不同的,只有1个元素不在它应该在的位置上。以下是一些示例: 28 (144) 44 52 60 60 68 76 84 (65) 100 结构体如下所示: struct node {node * next; int val;} ...

7得票7回答
尝试理解插入排序算法

我正在阅读一些关于Python编程、数据结构以及算法分析与设计的书籍。我希望真正理解编码的细节,并成为一名高效的程序员。由于难以向书本求证,因此我在stackoverflow上提出了问题。我发现算法和递归很具有挑战性...我在下面发布了一些代码(插入排序),我正在尝试准确理解其中发生了什么。我...

11得票1回答
算法:混合归并排序和插入排序的执行时间

大家好,SO社区:我是一名计算机科学专业的学生,目前正在进行一项实验,将MergeSort和InsertionSort相结合。我们知道,在特定阈值S下,InsertionSort的执行时间比MergeSort更快。因此,通过合并这两种排序算法,可以优化总运行时间。然而,经过多次实验,使用100...

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

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

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

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

10得票6回答
一个适用于包含时间数据的几乎有序列表的高效排序算法?

名称已经说明了一切。我认为插入排序是最好的选择,因为它通常是大多数情况下最好的排序算法。但是,由于我更了解数据,所以还有其他的排序算法值得考虑。以下是其他相关信息: 1)这是时间数据,这意味着我可以为数据的排序创建一个有效的哈希表。 2)数据不会全部同时存在,而是我将读取可能包含单个向量、十...

10得票3回答
排序时出现的非常奇怪的效率问题

我目前正在学习数据结构课程,而我们需要做的事情之一就是编写一些常见的排序算法。在编写我的插入排序算法时,我注意到它比我的教师的算法要快得多(对于400000个数据点,我的算法需要大约30秒,而他的算法则需要90秒)。我将我的代码发送给了他,当它们在同一台机器上运行时,两者得到相同的结果。我们花...

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

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

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

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

7得票2回答
如何将函数式插入排序代码改为尾递归

最近我用函数式编程风格实现了插入排序算法,代码变得更加简洁和声明性。问题是如何将其转换为尾递归形式,如果列表的大小增长到10000,该代码将抛出异常。 def InsertSort(xs: List[Int]): List[Int] = xs match { case Nil =&g...