【问题标题】:Bubble sorting max number of times?冒泡排序最大次数?
【发布时间】:2016-02-27 05:52:43
【问题描述】:

我正在尝试创建一个使用冒泡排序对 100 个随机数进行排序的函数。 但是,我想我可能做错了什么。让我先给你看我的代码:

#define MAXVALUE 100

void sortera_nummer(int slumptal[]){
int i,j,temp,k=0;


for(i=0;i<MAXVALUE;i++){
    for(j=MAXVALUE-1;j>i;j--){
        if(slumptal[j-1]>slumptal[j]){
            temp=slumptal[j-1];
            slumptal[j-1]=slumptal[j];
            slumptal[j]=temp;
            k++;
        }
    }
}
printf("K = %d",k);
}

所有数字都从低到高排序,因此排序有效。但我得到的 K = 一个出乎意料的高数字。 (它在 2300 到 2700 之间无处不在。)

所以现在我想知道 - 正常工作的冒泡排序可以使用 100 个元素运行的最大次数应该是多少?计算公式是什么?

(这是我第一次发帖,如有错误请见谅。) 提前致谢。

【问题讨论】:

  • 在最坏的情况下,n 迭代 n/2 交换冒泡排序,输入顺序为 n
  • 我数学不是很好,你能解释一下吗?编辑:我假设 n,在这种情况下,= 100?
  • 最坏的情况是您的输入数组完全降序排列。在这种情况下,最后一个元素需要 n-1 次迭代才能冒泡。在该迭代中,下一个最小元素将到达前一个循环的第一次交换中的最后一个位置。它会重复。
  • 如果我错了,请纠正我,但是。如果在这种情况下,n = 100。那么 n^2 = 10 000。意思是 2300'ish-2700'ish 毕竟不是那么糟糕的结果,对吗?
  • 在每次迭代中,下一个最小的需要比前一个循环少一个交换。数学结果是你的n^2=10 000 应该是n(n-1)/2=4 900。所以大约有一半听起来是对的。另一种检查方法是尝试n=50,这应该会导致 1/4 的交换。

标签: math bubble-sort


【解决方案1】:

最坏的情况是输入数组按降序排序。第一个循环执行 99 次,接下来 98 次,接下来 97 次……相当于 "sum(n) from n=99 to n=1" ,这意味着最坏的情况是 n(n+1) /2,在你的情况下 n=99 是 4950。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2019-01-13
    • 2016-02-10
    相关资源
    最近更新 更多