【问题标题】:Bubble sort - variations (Performace time) - python冒泡排序 - 变体(执行时间) - python
【发布时间】:2015-08-19 21:37:39
【问题描述】:

我在 python 中有 3 种冒泡排序方法, 代码链接 - github

我正在使用this为他们测试性能

从输出:

Time taken[bubbleSort]: list size 1000 --> 0.0876331 seconds
Time taken[bubbleSort1]: list size 1000 --> 0.0575149 seconds
Time taken[bubbleSort2]: list size 1000 --> 0.000144 seconds 

Time taken[bubbleSort]: list size 3000 --> 0.8421631 seconds
Time taken[bubbleSort1]: list size 3000 --> 0.605628 seconds
Time taken[bubbleSort2]: list size 3000 --> 0.000545 seconds 

Time taken[bubbleSort]: list size 5000 --> 2.421416 seconds
Time taken[bubbleSort1]: list size 5000 --> 1.6900301 seconds
Time taken[bubbleSort2]: list size 5000 --> 0.000668 seconds

我认为,在 bubbleSort1() 中,我不会通过检查是否交换来停止循环,这是在 bubbleSort2() 中完成的,这可能是时间差的原因。不确定bubbleSort()。


需要清楚地了解此处 3 种方法的时间差异的确切原因。谢谢!

【问题讨论】:

    标签: python algorithm python-3.x bubble-sort


    【解决方案1】:

    比较Bubblesort1()Bubblesort2()

    maximum passes can be n-1 , but consider a case in which after 2 passes 
    the array is sorted . so bubblesort1() will waste cpu time on other n-1-2 passes
    but bubblesort2() will stop the loop and hence it is efficient.
    

    【讨论】:

    • 谢谢你的时间,所以关于bubblesort1() 和bubble2() 现在很清楚这是因为在排序完成后没有打破循环,但是关于第二点(bubblesort()) ,我已经用单行交换替换了 tmp 变量的交换,并且时间间隔仍然相同。
    【解决方案2】:

    正如 Pola 所写,对于排序(和其他)算法,总是存在最坏情况最好情况以及介于两者之间的情况。对于冒泡排序,最好的情况是已经排好序的时候,最坏的情况是顺序颠倒的时候。

    有一个名为时间复杂度的术语——标记为大O,它粗略地表示基于已解决问题的大小(这里是排序元素的数量)的算法质量。它基于这样的假设,即您可以认为一些琐碎的操作需要固定的时间才能完成。然后您会考虑必须执行多少此类步骤才能解决问题。

    当拥有n 元素的数组时,最幼稚的冒泡排序方法需要nn 步骤(不考虑数组的部分已经排序)。仅对文件的其余部分进行排序时,您需要大约 (n*n)/2 步骤。仅当您考虑最坏的情况时才这样做。

    当您添加检测以在没有交换任何内容时停止(即所有内容都已排序),在某些情况下您会获得更好的结果 - 这是您获得最佳情况的时候。排序后的最小步数为n

    不详述,冒泡排序的时间复杂度是O(n^2),它说冒泡排序是你能用的最差的排序算法之一。最好的排序算法(内存中,单处理器)的时间复杂度为O(n log(n))

    阅读这里https://en.wikipedia.org/wiki/Time_complexity 在这里http://bigocheatsheet.com/

    【讨论】:

      猜你喜欢
      • 2022-10-21
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多