我在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种方法中时间差异的确切原因。谢谢!
答案 0 :(得分: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.
答案 1 :(得分:0)
正如Pola写的那样,通过排序(和其他)算法,总有最坏的情况,最好的情况,以及介于两者之间的东西。对于冒泡排序,最好的情况是它已经排序,最坏的情况是顺序颠倒。
有一个名为时间复杂度的术语 - 标记为大O
,大致根据已解决问题的大小(此处是已排序元素的数量)来说明算法的质量)。它基于这样的假设:您可以认为某些微不足道的操作需要花费一个恒定的时间来完成。然后你考虑必须采取多少步骤来解决问题。
拥有n
元素数组时,最简单的冒泡排序方法需要n
次n
步(不考虑数组的部分已经排序)。仅排序文件的其余部分时,您需要执行(n*n)/2
步骤。只有在考虑最坏的情况时才会这样做。
当您在没有交换任何内容时添加检测停止(即,所有内容已经排序)时,在某些情况下会得到更好的结果 - 这是您获得最佳案例的时候。对于已排序的序列,最小步数为n
。
不详细说明,冒泡排序的时间复杂度为O(n^2)
,它表示冒泡排序是您可以使用的最差排序算法之一。最好的排序算法(在内存中,单处理器)具有时间复杂度O(n log(n))
。
在这里阅读https://en.wikipedia.org/wiki/Time_complexity 在这里http://bigocheatsheet.com/