好的,还在学习数组。 我编写了这段代码,用0和1之间的随机数填充名为“rand”的数组(不包括)。 我想开始学习复杂性。 For循环执行n次(100次),每次需要O(1)时间,所以更糟糕的情况是O(n),我是对的吗? 此外,我使用ArrayList存储100个元素,我导入了“Collections”并使用Collections.sort()方法对元素进行排序。
import java.util.Arrays;
public class random
{
public static void main(String args[])
{
double[] rand=new double[10];
for(int i=0;i<rand.length;i++)
{
rand[i]=(double) Math.random();
System.out.println(rand[i]);
}
Arrays.sort(rand);
System.out.println(Arrays.toString(rand));
}
}
的ArrayList:
import java.util.ArrayList;
import java.util.Collections;
public class random
{
public static void main(String args[])
{
ArrayList<Double> MyArrayList=new ArrayList<Double>();
for(int i=0;i<100;i++)
{
MyArrayList.add(Math.random());
}
Collections.sort(MyArrayList);
for(int j=0;j<MyArrayList.size();j++)
{
System.out.println(MyArrayList.get(j));
}
}
}
答案 0 :(得分:2)
是的,你是对的,添加N项的复杂性是O(N)。根据文档:
,在大多数情况下,排序将需要额外的O(N * log(N))排序算法是一个改编的快速排序,改编自Jon L. Bentley和M. Douglas McIlroy的“工程排序函数”, 软件实践与经验,卷。 23(11)P。1249-1265(11月 1993年)。该算法在许多数据集上提供n * log(n)性能 导致其他快速降级降级为二次性能。
ArrayList
仍然由一个数组支持,因此复杂性将是相同的,无论如何都会偶尔调整大小。