【发布时间】:2016-05-28 05:21:46
【问题描述】:
我知道冒泡排序和选择排序的大 O 值是相同的,(n)^2,但是当我尝试使用大小为 1000 的数组运行两者时,冒泡排序需要 962037 次交换来对数组进行排序,而选择排序只需要 988 次交换来对数组进行排序。为什么这些不同?
【问题讨论】:
标签: java big-o bubble-sort selection-sort
我知道冒泡排序和选择排序的大 O 值是相同的,(n)^2,但是当我尝试使用大小为 1000 的数组运行两者时,冒泡排序需要 962037 次交换来对数组进行排序,而选择排序只需要 988 次交换来对数组进行排序。为什么这些不同?
【问题讨论】:
标签: java big-o bubble-sort selection-sort
因为复杂度是指比较次数,而不是交换次数。两者都需要 O(n^2) 比较,但选择排序在最坏情况下只需要 n-1 交换 (O(n)),而冒泡排序可能需要高达 n*(n-1)/2 交换 (O (n^2))。
即使复杂性指的是交换的数量——因为符号忽略了常量(一个实际上可能是1000*n^2 + 500*n*log(n) + 100*n + 10,而另一个可能是n^2),这两个数字仍然可能相差一个很大的值.
【讨论】:
Big O 表示法提供了无症状成本,但是,所有加法值和常数都被省略了。此外,对于小数字的实际比较,您需要查看平均比较次数。更具体地说,冒泡排序平均每个条目需要 n/4 次交换,而选择排序只需要 1 次,有关详细信息,请参阅此 post。比较的次数还取决于初始分布,例如数据是半排序的还是完全随机的。
【讨论】: