【发布时间】:2021-08-22 19:41:15
【问题描述】:
这是 Java 中的一种排序算法。我必须分析这个算法,但我对这个主题真的很陌生,不确定每一行的作用。我知道它具有O(N²) 的复杂性,但我不明白它是什么类型。
有人可以解释一下someAlgorithm()的方法吗?
这是代码:
import java.util.Arrays;
public class SomeClass {
public static void main(String[ ] args) {
int[] data = {12, 14, 13, 15, 19, 17, 16, 11, 18, 20};
System.out.println("Compute some result for the Array : " + Arrays.toString(data));
int[] result = someAlgorithm(data);
System.out.println("Resulting Array: " + Arrays.toString(result));
}
private static int[] someAlgorithm(int[] data) {
int size = data.length;
int[] result = new int[size];
for (int i = 0; i < size; i++) {
int total = 0;
for (int j = 0; j <= i; j++) {
total += data[j];
}
int average = total / (i + 1);
result[i] = average;
System.out.println("Average for iteration " + i + " is: " + average);
}
return result;
}
}
【问题讨论】:
-
您是否尝试运行此代码?该算法与排序无关。它只是将输入数组
12+14的两个第一个元素相加,然后将其除以索引(它应该计算平均值,但绝对不是平均值)。该算法的复杂度为 O(N)。 -
@Alex 我想说你错了。内部循环运行
1+2+3->O(N^2)次。而且它确实是平均值,result[i]存储了第一个i元素的平均值。 -
@KabirKanhaArora,我对复杂性的评论引用了原始代码,正如您在编辑历史记录中看到的那样,其中嵌套循环使用了一个常量值。
-
这不是排序算法,您可能需要先运行它