Tim 排序算法

2025年3月17日 | 阅读11分钟

在本文中,我们将讨论 Tim 排序算法。Tim 排序是一种从插入排序和归并排序演变而来的排序算法。它旨在对各种真实世界的数据实现最佳性能。

Tim 排序是一种自适应排序算法,需要 O(n log n) 次比较来对 n 个元素组成的数组进行排序。它由 Tim Peters 于 2002 年用 Python 编程语言设计并实现。自 Python 2.3 版本以来,它一直是 Python 的标准排序算法。它是最快的排序算法。

Tim 排序算法使用的基本方法是:首先使用插入排序对小块进行排序,然后使用归并排序的归并函数将所有大块合并。

现在,让我们看看 Tim 排序的算法。

算法

Tim 排序算法的工作原理

现在,让我们看看 Tim 排序算法的工作原理。

在 Tim 排序中,首先将数组分成称为 RUN 的小块。分割后,取每个单独的 RUN,并使用插入排序技术进行排序。之后,使用归并排序算法的 merge() 函数合并所有已排序的 RUN。

在 Tim 排序中,使用插入排序的优势在于插入排序对于小尺寸数组效率很高。

Tim 排序算法示例

让我们看一个 Tim 排序算法的示例。为了理解 Tim 排序算法的工作原理,我们取一个未排序的数组。通过示例更容易理解 Tim 排序。

假设数组元素为 -

Tim Sort Algorithm

为了简单说明,我们假设 RUN 的大小为 4。

现在,将给定数组分成两个子数组,它们是 -

Tim Sort Algorithm

第一个子数组是 -

Tim Sort Algorithm
已排序的子数组未排序的子数组Array
(40)(10, 20, 42)(40, 10, 20, 42)

第一次迭代

a[1] = 10

已排序的子数组未排序的子数组Array
(10, 40)(20, 42)(10, 40, 20, 42)

第二次迭代

a[2] = 20

已排序的子数组未排序的子数组Array
(10, 20, 40)(42)(10, 20, 40, 42)

第三次迭代

a[3] = 42

已排序的子数组未排序的子数组最终数组
(10, 20, 40, 42)()(10, 20, 40, 42)

第二个子数组是 -

Tim Sort Algorithm
已排序的子数组未排序的子数组最终数组
(27)(25, 1, 19)(27, 25, 1, 19)

第一次迭代

a[1] = 25

已排序的子数组未排序的子数组最终数组
(25, 27)(1, 19)(25, 27, 1, 19)

第二次迭代

a[2] = 1

已排序的子数组未排序的子数组最终数组
(1, 25, 27)(19)(1, 25, 27, 19)

第三次迭代

a[3] = 19

已排序的子数组未排序的子数组最终数组
(1, 19, 25, 27)()(1, 19, 25, 27)

现在,合并两个已排序的子数组以获得最终数组 -

Tim Sort Algorithm
Tim Sort Algorithm

现在,数组已完全排序。

Tim 排序复杂度

现在,让我们看看 Tim 排序在最佳情况、平均情况和最差情况下的时间复杂度。我们还将看到 Tim 排序的空间复杂度。

1. 时间复杂度

情况时间复杂度
最佳情况O(n)
平均情况O(n log n)
最坏情况O(n log n)
  • 最佳情况复杂度 - 当不需要排序时发生,即数组已经排序。Tim 排序的最佳情况时间复杂度是 O(n)。
  • 平均情况复杂度 - 当数组元素以混乱的顺序排列,既不是完全升序也不是完全降序时发生。Tim 排序的平均情况时间复杂度是 O(n log n)。
  • 最差情况复杂度 - 当数组元素需要以相反顺序排序时发生。这意味着假设您必须按升序排序数组元素,但其元素按降序排列。Tim 排序的最差情况时间复杂度是 O(n log n)。

2. 空间复杂度

空间复杂度O(n)
稳定版
  • Tim 排序的空间复杂度是 O(n)。

Tim 排序的实现

现在,让我们看看用不同编程语言实现的 Tim 排序程序。

程序: 编写一个程序以 C 语言实现 Tim 排序。

输出

执行上述代码后,输出将是 -

Tim Sort Algorithm

程序: 编写一个程序以 C++ 实现 Tim 排序。

输出

Tim Sort Algorithm

程序: 编写一个程序以 C# 实现 Tim 排序。

输出

Tim Sort Algorithm

程序: 编写一个程序以 Java 实现 Tim 排序。

输出

执行上述代码后,输出将是 -

Tim Sort Algorithm

所以,这就是关于本文的全部内容。希望本文能对您有所帮助并提供信息。


下一主题排序算法