据说选择排序的复杂度为O(N ^ 2),但是由于我减少了循环执行的次数,所以我没有逻辑。我了解代码块2,但不了解代码块1
public int[] Sorting(int[] array)
{
for (i = 0; i <= array.Length - 1; i++)
{
minimum=i;
for (j = i; j < array.Length-1; j++)
{
if (array[minimum] > array[j+1])
minimum = j + 1;
}
int temp = array[minimum];
array[minimum] = array[i];
array[i] = temp;
}
return array;
}
for(i=0;i<=n;i++) //Code 2
{
for(j=0;j<=n;j++)
答案 0 :(得分:5)
让n
为数组大小。
然后查看比较次数(调用if (array[minimum] > array[j+1])
)。
最后,它被称为0 + 1 + ... +(n-1)次。
根据您的情况,它是(n-1)*n/2
,即O(n²)
修改:
因此,比较的确切次数是(n-1)*n/2
,不是确切的n²
,看起来比n²
好,但实际上不是。
如果要输入10倍以上,则需要花费100倍以上的时间来完成算法。
对于100倍以上的输入,您要完成10倍以上的时间才能完成算法。
如您所见,当您将条目数乘以 k 时,您将大致乘以k²计算时间。