Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Arrays 检查数组是否未排序的最佳时间复杂度_Arrays_Algorithm_Sorting_Time Complexity - Fatal编程技术网

Arrays 检查数组是否未排序的最佳时间复杂度

Arrays 检查数组是否未排序的最佳时间复杂度,arrays,algorithm,sorting,time-complexity,Arrays,Algorithm,Sorting,Time Complexity,在检查给定数组是否未排序时,我试图找出最佳情况下的时间复杂度 我认为,这是检查数组是否已排序的最快方法,对于这个数组,时间复杂度应该是O(n) for (i = 0; i < a.length-1; i++) { if (a[i] < a[i + 1]) { return true; } else { return false; } } (i=0;i

在检查给定数组是否未排序时,我试图找出最佳情况下的时间复杂度

我认为,这是检查数组是否已排序的最快方法,对于这个数组,时间复杂度应该是O(n)

for (i = 0; i < a.length-1; i++) { 
  if (a[i] < a[i + 1]) {
    return true;
  } else {
    return false;
  }
}
(i=0;i if(a[i] 还是我错了?

是的,这需要
O(n)
,它是


此外,您需要更改以下内容:

for (i = 0; i < a.length; i++)
for(i=0;i
为此:

for (i = 0; i < a.length - 1; i++)
for(i=0;i

由于您访问
a[i+1
并且不想越界。此外,您的返回语句应该交换。

用于检查数组是否未排序的算法的平均和最坏情况复杂度是
O(N)
。但是最佳情况复杂度是
O(1)


最好的情况发生在数组的前两个元素无序时。这在第一次循环迭代中被检测到,并且无论
N

如何,都需要一个恒定的时间。只有当您尝试访问
a[i+1]时,这才可能引发错误
对于最后一个数组元素…循环应该只运行
i
(或者从1开始,然后与
a[i-1]
比较)。您的代码没有考虑正确的数组边界(条件应该是
i+1
),并且您不应该在循环内部返回
true
,因为您应该测试所有元素。@CBroe对于
a[i+1],代码将超出边界(UB)
但它永远不会超过第一次迭代。这个问题不是要求最快的算法来查找数组是否已排序,而是要求最好的案例复杂度。投票重新打开。@Henkholtman将一个问题称为完全的火车失事应该很容易。代码块有一个小错误,并且已更新。问题的逻辑是nee答案不是代码块本身这会更好:
for(i=0;i+1
为什么@DAle?请解释。为了避免在
a.length==0
@DAle的情况下可能出现无限循环,只有
a.length-1
未签名时才会出现问题,因此可能会下溢为一个非常大的数字。如果有签名,则需要检查
0<-1
,这是错误的,因此循环会立即中断(Java就是这种情况,这段代码看起来像这样)@Dukeling,谢谢你的澄清!我知道这段代码看起来像Java代码,在Java中没有这样的问题。但有可能这是另一种语言,这就是我写“可能”的原因。我更喜欢在Java中使用循环的
I+1
形式。只是不想强迫读者去思考签名的/unsigned/underflow员工。