算法说明
假设煎锅里边有N个煎饼摞在了一起,它们大小不一并且顺序不一致,我们需要通过拿铲子将它们不停的翻个,进行排序,最终得到一个底下是大的煎饼,上边是小的煎饼的序列。这个排序的过程就是煎饼排序。
这个算法有两种解,一种是普通解,一种是最优解。
普通论证:
例如你的初始煎饼顺序是[2,4,3,1]
然后2与4交换位置,然后4与1交换位置,得出[1,3,2,4]。
然后3与1交换位置,接着3与2交换位置,得出[2,1,3,4]。
最后2与1交换位置,得出结果[1,2,3,4]
通过普通解的过程,我们能对算法做一个总结:
我们其实每次都是两两比较煎饼,然后先将大煎饼放到最上边去,然后再把大煎饼放到最下边去。如果是n个煎饼,那么我们要进行2*n次。 不过我们注意一下。在2与1进行交换时,我们只做了一次,也就是说,当只有最后一组数字时,我们只需要排序一次就可以,所以我们有2*(n-2)+1,那么最后结果是2n-3
当然我们这个时间复杂度只是排序的,查询的时间复杂度没有计算在内的。
最优解论证:
话说找到的最优解是(15/14)n≦ f(n) ≦ (5n+5)/3
不过没有找到论证的资料,而且找到后我估计我也看不懂,所以就不来论证了,发出来记录一下,以后有能力弄懂后再回来这里补充
总结:
煎饼排序感觉对于我们实际应用场景来说不是很实用,就当开阔一下思路啦。
代码
因为要考试,所以暂时先不写,以后补上
参考
http://semoncat.github.io/blog/2012/11/05/pancake-sorking/
http://blog.jobbole.com/74263/
时间: 2024-10-24 19:31:54