zoukankan      html  css  js  c++  java
  • Hark的数据结构与算法练习之煎饼排序

    算法说明

    假设煎锅里边有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/

  • 相关阅读:
    20201120-1 每周例行报告
    20201112-1 每周例行报告
    20201105-1 每周例行报告
    20201029-1 每周例行报告
    20201022-1 每周例行报告
    20201015-3 每周例行报告
    20201008-1 每周例行报告
    20200924-1 每周例行报告
    使用代理服务器的方式在一个端口上运行多个服务
    只出现一次的数字
  • 原文地址:https://www.cnblogs.com/hark0623/p/4375176.html
Copyright © 2011-2022 走看看