- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以提供一个使用 Knuth 序列的 Java shellsort 的简单工作示例吗?我在互联网上查看了几个地方,但找不到适合我的解释。我在概念层面上理解 shellsort - 因为它是一种插入排序,它是在间隙上完成的,间隙随着时间的推移而缩小,直到间隙达到 1 - 这本质上是一种插入排序。然而,Knuth 序列是 (k * 3 - 1)/2,前几个间隙的列表通常表示为 [1, 4, 13, 40, 121.. 等等]。
我的问题是如何实现?起始间隙实际上是 1,还是该序列在大于要排序的列表的大小之前生成的值?如果间隙从 1 开始,如果我正确理解希尔排序,目的就会落空。有人可以解释一下吗?我觉得我错过了一些对于理解这件事至关重要的东西。
提前致谢。
最佳答案
迟到的答案,但对于那些懒得关注其他答案的链接或链接断开的 future 旁观者......
这是一种实现 Knuth 算法以查找初始间隙值以及按降序排列的剩余间隙值的方法:
// Find initial gap.
gap = 1;
while gap < arrayLength {
gap = gap * 3 + 1;
}
// Perform the main sorting logic...
// Somewhere within code, at the end
// of the main sorting logic, find next
// descending gap value.
gap /= 3;
起始间隙不是 1。它是在超过正在排序的数组长度之前计算的最后一个最大数字。
底部除以 3 的部分基本上按照 while 循环中执行的计算的相反顺序进行,以便按降序获得序列中的下一个间隙值。每次主排序逻辑结束时都会执行此操作。
此外,该公式实际上是 (3^k - 1)/2 和 NOT (3k - 1)/2。前者将产生正确的序列 (1, 4, 13, 40, ...) 和后者是错误的。
关于java - 如何在 Java 中为 shellsort 正确实现 Knuth 序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33339851/
尝试根据用户关注者的数量对推文对象进行排序。数据和对象键是从 mysql 数据库自定义的,其中包含我一直在为应用程序构建收集的数据。我有一个名为 dstore 的数组,包含如下所示的各个对象: # {
我想自己实现 shellsort 而不是在线复制粘贴那些,如果有人能帮助我找到错误并改进我愚蠢的 lil 代码,我将不胜感激我会把我的代码放在下面 #include #include using
我在编写简单程序对随机数数组进行 shellsort 时遇到了问题。程序不会对它进行排序,只是打印 1,1,1,1,1 或 0,0,0,0,0,即使 shellsort 算法来自 Rosettacod
我需要一种在 C# 中使用 ShellSort 对数组进行排序的简单方法,请帮助我 最佳答案 使用 shell 排序。 关于c# - 类作业 - C# 中的 shellsort?,我们在Stack O
这段代码是由 Ritchie 用 ANSI C 编写的......我在这段代码中使用了我怀疑的注释。我还从 youtube 上学习了 shell 排序,并理解了它实际上是如何工作的,但是这段代码非常令
对于两种不同的排序,我有两个实现,InsertionSort 和 ShellSort。 它们如下: 插入排序: for (int pos = 0; pos 0; secondMarker--) {
void shellsort(int v[], int n) { int gap, i, j, temp; for (gap = n/2; gap > 0; gap /= 2)
我正在尝试将 C 函数转换为 32 位 NASM。 这是 C 函数 void shellsort (int *A, int n) { int gap, i, j, temp; for
有人可以提供一个使用 Knuth 序列的 Java shellsort 的简单工作示例吗?我在互联网上查看了几个地方,但找不到适合我的解释。我在概念层面上理解 shellsort - 因为它是一种插入
简介 Shellsort 是我不久前遇到的一种有趣的排序算法。最神奇的是,不同的空位序列可以显着提高算法的速度。我读了一些书(没有广泛阅读),似乎 Tokuda 的序列被推荐用于实际应用。 另一个有趣
我正在编写一个程序来对数字数组执行 shellsort。我首先必须生成将执行 shellsort 的数字序列。该函数用于生成 2^p*3^q 形式的数字,该数字小于要排序的数组的长度。然后我对刚刚生成
我试图理解 K&R 书中第 62 页的 ShellSort 代码。但有一部分我不确定。 下面是书中的原始代码: void shellsort(int* v, int n) { int gap,
以下是来自普林斯顿的 coursera 算法类(class)的练习。 如果一个数组既是 3 次排序又是 5 次排序,那么它是否也是 6 次、7 次、8 次、9 次和 10 次排序?我知道任何序列如果先
我是一名优秀的程序员,十分优秀!