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

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

int[] arr = {2, 5, 3}; if (/* arr is sorted */) .... else ... 

这个方法Array.sort是无效的

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

 boolean sorted = true; for (int i = 0; i < arr.length - 1; i++) { if (arr[i] > arr[i+1]) { sorted = false; break; } } 
 public static  boolean isArraySorted(T[] elements, Comparator 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; } 

那么你可以在O(n)最坏情况线性时间内检查它。 未排序的数组(假设您的意思是按升序排序)将具有跳转点。 那是在某些时候arr [i]> arr [i + 1]

你需要做的就是

 boolean is_array_sorted(int arr[]) { for(int i=0; i < arr.len-1; i++) { if(arr[i] > arr[i+1]) { return false; } } return true; } 

如果你的数组排序应该是降序,只需将>更改为<

 public static boolean isSorted(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { if (a[i + 1] < a[i]) { return false; }; } return true; } 

更短的版本:

 [0,1,2,3,4].reduce((a,v) => (a!==false) && (a <= v) ? v : false, -Infinity) [4,3,1,2,0].reduce((a,v) => (a!==false) && (a >= v) ? v : false, +Infinity) 

要小心,因为在某些情况下它不会有效,因为它会循环遍历整个arrays而不会过早断开。

Array.prototype.reduce()