我最近在一本书中读到,如果我们要对数组中的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;
}
}
}
答案 0 :(得分:6)
如果我正确理解了这个问题,就会有一些误解。对于任何数量n
的元素,都有
n!=1*2*...*(n-1)*n
排列它们的不同可能性,也称为排列。然而,这与任何排序算法无关。 Bubblesort的渐近运行时复杂度是
O(n^2)
正如你已经提到的那样,因为Bubblesort比尝试所有可能性更聪明一点。为了最终回答正确的问题,否,Bubblesort