Java Best和Worst案例的复杂性

时间:2014-05-11 14:45:37

标签: java algorithm complexity-theory

这个java程序中最好和最坏的情况是什么。我认为最坏的情况是O(n ^ 2)和最佳情况O(n)或者O(1)。如果列表已经排序,我可以简单地在O(1)中说出最佳情况吗?如果数组是空的怎么办?它能做出最好的情况O(0)吗?有人可以向我解释一下。

先谢谢你

     public class playground {
      static void printSimpleMedian(int[] arr) {
    if (arr == null || arr.length == 0) {
        System.out.println("Array is empty");
    } else {
        boolean sorted = true;
        for (int i = 0; i < arr.length - 1; i++) {
            if (arr[i] > arr[i + 1]) {
                sorted = false;
            }
        }
        if (!sorted) {
            for (int i = 0; i < arr.length / 2; i++) {
                int max = i;
                int min = i;
                for (int j = i; j < arr.length - i; j++) {
                    if (arr[max] < arr[j]) {
                        max = j;

                    }
        //System.out.print(max);
                }

                for (int j = i; j < arr.length - i; j++) {

                    if (arr[min] > arr[j]) {
                        min = j;
                    }
                    //System.out.print(min);
                }

                int tmp = arr[i];

                arr[i] = arr[min];

                arr[min] = tmp;

                tmp = arr[arr.length - i - 1];

                arr[arr.length - i - 1] = arr[max];

                arr[max] = tmp;
            }
        }

        // if array length is even upper median is chosen

        System.out.println(arr[arr.length / 2]);
        }
    }



  }

1 个答案:

答案 0 :(得分:0)

快速浏览后,这是我的两分钱:

  • 我认为O(0)没有任何实际意义。我来看看这个链接:Is the time complexity of the empty algorithm O(0)?。我会说,对于一个空数组,它在恒定时间运行,O(1),但我不确定没有输入的特殊情况应该算作最好的情况......按照这种逻辑的方式,我认为我们可以说所有算法的复杂性对于最好的情况都是恒定的,对我而言似乎打败了整个O符号的目的。

  • 在最好的情况下,当对数组进行排序时,您将进行O(n)次比较操作。

  • 在最坏的情况下,你运行的是第一个循环,即O(n),第二个循环一次,它有两个独立的内循环,因此O(n * 2n)= O(2n ^ 2)= O(n ^ 2),因此是O(n + n ^ 2)= O(n ^ 2)。