气泡排序算法中的迭代次数是否等于(n-1)!对于n个元素?

时间:2016-06-24 11:41:40

标签: algorithm bubble-sort

我最近在一本书中读到,如果我们要对数组中的n元素进行排序,则所需的迭代次数将为n*(n-1)*...*1 = 7!

但是我确定实际的比较次数是(n-1)+(n-2)+ ... + 1 = n(n-1)/ 2。那么迭代次数和比较次数有何不同?我猜不,因为在每次迭代中,值都会被比较[if(m[j]>m[j+1])]。我错过了什么,或者这本书错了吗?

整个代码:

for(i=0;i<7;i++)
{
    for(j=0;j<7-i;j++)
    {
        if(m[j]>m[j+1])
        {
            t=m[j];
            m[j]=m[j+1];
            m[j+1]=t;
        }
    }
}

1 个答案:

答案 0 :(得分:6)

如果我正确理解了这个问题,就会有一些误解。对于任何数量n的元素,都有

n!=1*2*...*(n-1)*n

排列它们的不同可能性,也称为排列。然而,这与任何排序算法无关。 Bubblesort的渐近运行时复杂度是

O(n^2)
正如你已经提到的那样,因为Bubblesort比尝试所有可能性更聪明一点。为了最终回答正确的问题,,Bubblesort