algorithm - 壳排序和插入排序

标签 algorithm data-structures

我遇到了一个问题。我对 shell 排序和插入排序算法感到很困惑。我们应该如何区分?

最佳答案

Shell sortInsertion sort 的通用版本.两种算法的基本原理相同。你有一个长度为 n 的排序序列,你将未排序的元素插入其中 - 你会得到 n+1 个元素长的排序序列。

区别如下:而插入排序仅适用于一个序列(最初是数组的第一个元素)并扩展它(使用下一个元素)。 但是,shell 排序具有递减增量,这意味着比较的元素之间存在间隙(最初为 n/2)。因此,有 n/2 个序列需要使用插入排序进行排序。在每一步中,增量都会缩小(通常仅除以 2.2),序列数也会减少。最后一步没有间隙,算法退化为简单插入排序。

由于增量递减,大元素和小元素被快速移动以校正数组的一部分,并且比最后一步使用插入排序排序的速度非常快。这导致时间复杂度降低 O(n^(4/3))

关于algorithm - 壳排序和插入排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14619504/

相关文章:

你能改变 C 非指针类型的内存地址吗?

c - 如何确定双向链表成为比简单链表更好的解决方案的点?

python - Python 中的哈希集和哈希表

c++ - 可遍历内存池的数据结构

java - 在 Heap 的递归算法中返回一个数组

c - 从C语言的句子中删除重复的单词

algorithm - 从不同的角度构建装饰品的方法。彩珠(图论算法)

algorithm - 如果我对唯一的字符串使用简单的替换算法,输出是否总是唯一的?

php - 使用特定要求重新排序数组

c# - 在树中转换表