冒泡排序 - 变化(Performace time) - python

时间:2015-06-05 03:44:48

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

我在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种方法中时间差异的确切原因。谢谢!

2 个答案:

答案 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元素数组时,最简单的冒泡排序方法需要nn步(不考虑数组的部分已经排序)。仅排序文件的其余部分时,您需要执行(n*n)/2步骤。只有在考虑最坏的情况时才会这样做。

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

不详细说明,冒泡排序的时间复杂度为O(n^2),它表示冒泡排序是您可以使用的最差排序算法之一。最好的排序算法(在内存中,单处理器)具有时间复杂度O(n log(n))

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