返回

手把手教你煎饼排序:掌握LeetCode 969

前端

在烹饪的世界里,煎饼是一种蓬松、美味的佳肴,而在计算机科学领域,它却是一种算法,用来对数组进行排序。今天,让我们化身算法大师,探索LeetCode 969中煎饼排序的奥秘。

煎饼排序的奥义

煎饼排序是一种巧妙的算法,它通过一系列的"煎饼翻转"操作,将数组中的元素从小到大排列。想象一下,我们有一摞煎饼,要把它们从最下面的一张开始,依次翻到最上面。

算法步骤

步骤 1:找到最大元素

首先,找到数组中最大的元素,记为max

步骤 2:煎饼翻转到最下面

如果max元素不在最下面,执行以下操作:

  • 从头部开始,找出max元素并记录其索引i
  • 将煎饼从头部翻转到索引i处。

步骤 3:煎饼翻转到最上面

现在max元素已经到了最下面,再执行一次煎饼翻转,将它翻到最上面。

步骤 4:重复上述步骤

重复上述步骤,直到数组中所有元素都从小到大排列好。

煎饼翻转的过程

煎饼翻转操作的本质是将煎饼从头部翻转到指定位置。具体来说,如果要翻转前k个煎饼,执行以下操作:

  1. 将数组的头部元素翻转到最后。
  2. 将新的头部元素翻转到倒数第二个。
  3. ...
  4. 将第k个元素翻转到原头部的位置。

实战示例

考虑数组arr = [3, 2, 4, 1]:

步骤 1:找到最大元素

max = 4,索引为 2。

步骤 2:煎饼翻转到最下面

从头部翻转到索引 2,得到[4, 2, 3, 1]

步骤 3:煎饼翻转到最上面

再次从头部翻转,得到[1, 3, 2, 4]

步骤 4:重复上述步骤

max = 3,索引为 1。翻转到最下面得到[4, 3, 1, 2]

继续翻转到最上面得到[2, 1, 3, 4]

最后,max = 2,翻转得到最终排序好的数组[1, 2, 3, 4]

算法复杂度

煎饼排序的时间复杂度为 O(n^2),其中 n 是数组的长度。这是因为每一次煎饼翻转都需要 O(n) 的时间,而算法需要执行 n 次煎饼翻转。

延伸思考

煎饼排序是一种不稳定的排序算法,这意味着相同元素的顺序在排序后可能会发生变化。在实践中,煎饼排序很少用于大型数组的排序,因为存在更有效率的算法。然而,它在某些特定的应用场景中仍然有用,例如:

  • 维护一个不断更新的小型数组的有序性。
  • 对图形和图像进行操作。

总结

通过深入了解煎饼排序的原理和步骤,我们掌握了另一种排序算法的利器。下次你遇到一个杂乱无章的数组时,不妨尝试使用煎饼排序,亲身体验其独到的魅力。