这个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]);
}
}
}
答案 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)。