我知道冒泡排序和选择排序的大O值是相同的,(n)^ 2,但是当我尝试使用大小为1000的数组运行时,冒泡排序采用962037交换来排序数组,而选择排序只需要988个交换来对数组进行排序。为什么这些不同?
答案 0 :(得分:3)
因为复杂性是指比较的次数,而不是掉期数量。两者都需要O(n ^ 2)比较,但选择排序只需要在最坏情况下进行n-1
交换(O(n)),而bubblesort可能需要最多n*(n-1)/2
个交换(O(n ^ 2) )。
即使复杂性指的是交换数量 - 因为符号忽略常量(实际上可能是1000*n^2 + 500*n*log(n) + 100*n + 10
,而另一个可能是n^2
),两个数字仍然可能不同一个很大的价值。
答案 1 :(得分:1)
Big O表示法提供无症状成本,但是,省略了所有附加值和常量。此外,为了对小数字进行实际比较,您需要查看平均比较次数。更具体地说,冒泡排序平均每个条目需要n / 4个交换,而选择排序只需要1,请参阅此post以获取更多详细信息。比较次数还取决于初始分布,例如数据是半分类还是完全随机。