【问题标题】:Efficiency of Bubble vs. Selection Sort冒泡效率与选择排序
【发布时间】:2016-05-28 05:21:46
【问题描述】:

我知道冒泡排序和选择排序的大 O 值是相同的,(n)^2,但是当我尝试使用大小为 1000 的数组运行两者时,冒泡排序需要 962037 次交换来对数组进行排序,而选择排序只需要 988 次交换来对数组进行排序。为什么这些不同?

【问题讨论】:

    标签: java big-o bubble-sort selection-sort


    【解决方案1】:

    因为复杂度是指比较次数,而不是交换次数。两者都需要 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),这两个数字仍然可能相差一个很大的值.

    【讨论】:

    • 嗯?无论您是计算交换、比较还是一般操作,这两种算法都是 O(n^2)。
    • @Louis Wasserman:选择排序需要(在最坏的情况下)对每个不在正确位置的数字进行一次交换 (O(n))。对于冒泡排序,它取决于实际位置,但对于反向列表,您需要 n*(n+1)/2 交换 (O(n^2))
    【解决方案2】:

    Big O 表示法提供了无症状成本,但是,所有加法值和常数都被省略了。此外,对于小数字的实际比较,您需要查看平均比较次数。更具体地说,冒泡排序平均每个条目需要 n/4 次交换,而选择排序只需要 1 次,有关详细信息,请参阅此 post。比较的次数还取决于初始分布,例如数据是半排序的还是完全随机的。

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 2019-05-10
      • 2015-02-14
      • 1970-01-01
      • 2016-11-01
      • 2015-09-16
      • 1970-01-01
      相关资源
      最近更新 更多