如何检查数组是否已经排序

Oxo*_*HuK 8 java arrays sorting

那么如何制作这样的逻辑呢

int[] arr = {2, 5, 3};

if (/* arr is sorted */)
    ....
else 
    ...
Run Code Online (Sandbox Code Playgroud)

它的方法Array.sort是无效的

ars*_*jii 31

您不需要对数组进行排序以检查它是否已排序.循环遍历每个连续的元素对,并检查第一个元素是否小于第二个元素; 如果找到一个不成对的对,则不对数组进行排序.

boolean sorted = true;

for (int i = 0; i < arr.length - 1; i++) {
    if (arr[i] > arr[i+1]) {
        sorted = false;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不可能更快.显然,你必须至少查看一次所有元素.如果你不全神贯注,你怎么能分享? (7认同)
  • 你从来没有问为什么所有的投票:P(顺便说一句,我投了赞成票......) (3认同)
  • @Elist编写整个代码,然后你会明白为什么. (2认同)
  • @Elist只允许你每次迭代访问数组的一个元素,我们需要访问两个. (2认同)

Mik*_*uel 11

public static <T>
boolean isArraySorted(T[] elements, Comparator<? super T> cmp) {
  int n = elements.length;
  for (int i = 1; i < n; ++i) {
    if (cmp.compare(elements[i-1], elements[i]) > 0) { return false; }
  }
  return true;
}
Run Code Online (Sandbox Code Playgroud)