Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在循环中查找avg语句,如大O、O(n)等_Java_Methods_Big O - Fatal编程技术网

Java 在循环中查找avg语句,如大O、O(n)等

Java 在循环中查找avg语句,如大O、O(n)等,java,methods,big-o,Java,Methods,Big O,我离得太近了,我能尝到!我要计算我的方法中的所有语句,并找到取某个值“n”的语句的平均数。因此,我相信我的语句计数器已正确设置了所有内容,但我不确定如何以一种可以取每个“n”的平均数的方式计算此循环。我相信我必须将我的全部语句除以某个值,但我不确定这个数字是多少——有人能给我指出正确的方向吗?我知道我最终应该得到一个二次fxn,O(n^2) 这是我正在评估的方法 public static int myMethod(int[] array) { int statements = 0;

我离得太近了,我能尝到!我要计算我的方法中的所有语句,并找到取某个值“n”的语句的平均数。因此,我相信我的语句计数器已正确设置了所有内容,但我不确定如何以一种可以取每个“n”的平均数的方式计算此循环。我相信我必须将我的全部语句除以某个值,但我不确定这个数字是多少——有人能给我指出正确的方向吗?我知道我最终应该得到一个二次fxn,O(n^2)

这是我正在评估的方法

public static int myMethod(int[] array) {
    int statements = 0;
    for (int next = 1; next < array.length; next++) {
        statements++;
        int val = array[next];
        int index = next;
        while (index > 0 && val < array[index - 1]) {
            statements++;
            array[index] = array[index - 1];
            index--;
        }
        array[index] = val;
    }
    return statements;
}

编辑:我应该提到这个方法的作用。。。它取一个整数,比如说5,从一个随机顺序开始,它以升序排列1到5,例如,如果它是5,我们可以有4 1 2 3 5,它会把它组织成一个数组,1 2 3 4 5。。。。谢谢

我无法确定您试图计算的是什么,但如果我猜对了,n将是数组的大小(
array.length
),您需要计算数组中每个成员的平均语句数

所以

 avgStatements = statements/array.length
但是,如果要计算所有语句的数量,应该注意,内部循环有两条语句(不包括++),而外部循环有三条语句

因此,您可能应该这样计算:

public static int myMethod(int[] array) {
    int statements = 0;
    for (int next = 1; next < array.length; next++) {
        statements+=3;
        int val = array[next];
        int index = next;
        while (index > 0 && val < array[index - 1]) {
            statements+=2;
            array[index] = array[index - 1];
            index--;
        }
        array[index] = val;
    }
    return statements;
}
公共静态int-myMethod(int[]数组){
int语句=0;
for(int next=1;next0&&val
好的,我们有+=3个语句,因为“int val…”、“int index…”和“while()”都是在该循环中执行的语句吗?然后是while循环内部的相同理论?请注意,我的平均语句似乎正在形成一个线性函数,当我期望它是二次函数时,我期望avgStatements变量的值增加得更快。@Consuela
while
不是这三个变量中的一个(因为内部循环是单独计算的)。第三个是
array[index]=val
@Consuela为了使此代码与数组的长度成线性关系,语句/array.length应该是常量。@Consuela如果是二次的,则语句/(array.length*array.length)应该是常量。
public static int myMethod(int[] array) {
    int statements = 0;
    for (int next = 1; next < array.length; next++) {
        statements+=3;
        int val = array[next];
        int index = next;
        while (index > 0 && val < array[index - 1]) {
            statements+=2;
            array[index] = array[index - 1];
            index--;
        }
        array[index] = val;
    }
    return statements;
}