Math 气泡排序的最大次数?

Math 气泡排序的最大次数?,math,bubble-sort,Math,Bubble Sort,我试图创建一个函数,使用冒泡排序对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]){

我试图创建一个函数,使用冒泡排序对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);
}
#定义最大值100
空区分拣机(整数[]){
int i,j,temp,k=0;
对于(i=0;ii;j--){
如果(坍落度[j-1]>坍落度[j]){
温度=坍落度[j-1];
坍落度[j-1]=坍落度[j];
坍落度[j]=温度;
k++;
}
}
}
printf(“K=%d”,K);
}
这些数字都是从最低到最高排序的,所以排序是有效的。但我得到了一个出乎意料的高K值。(它在2300到2700年间无处不在。)

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

(这是我在这里的第一篇帖子,如果我犯了任何错误,我很抱歉。)
提前感谢。

最坏的情况是输入数组按降序排序。第一个循环执行99次,下一个98次,下一个97次。。。。。。这相当于“从n=99到n=1的和(n)”,这意味着最坏的情况是n(n+1)/2,在你的情况下,n=99是4950。

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