煎饼排序基本信息
煎饼排序是数量问题的口语术语,当刮刀可以插入堆叠中的任何点并用于翻转其上方的所有薄饼时,按照尺寸的顺序对无序堆叠的薄煎饼进行分类。煎饼数是给定数量的煎饼所需的最小翻转数。
与传统的排序算法不同,传统的排序算法试图以尽可能少的比较进行排序,目标是尽可能少地对序列进行排序。
这个想法是做类似于选择排序的事情。我们一个接一个地放置最后一个元素,并将当前数组的大小减少一个。
解剖问题:
- 需要从最小(顶部)到最大(底部)订购煎饼,起始堆可以按任何顺序排列。
- 我只能执行翻转翻转整个堆栈。
- 要将特定的煎饼翻转到堆栈的底部,我们首先必须将其翻转到顶部(然后再将其翻转到底部)。
- 要订购每个煎饼,需要一个翻转到顶部,一个翻转到最终位置。
直觉算法:
-
找到最大的乱序煎饼并将其翻转到底部(你可能需要先将其翻转到堆栈的顶部)。
-
重复步骤 1,直到订购堆栈。
-
就是这样,两步算法将起作用。
煎饼排序算法示例:
https://i.stack.imgur.com/SDjwT.gif
辅助空间: O(1)
时间复杂度: O(n^2)