所以如何制作这样的逻辑
int[] arr = {2, 5, 3};
if (/* arr is sorted */)
....
else
...
方法Array.sort无效
答案 0 :(得分:28)
您无需对数组进行排序以检查它是否已排序。循环遍历每个连续的元素对,并检查第一个元素是否小于第二个元素;如果找到一个不成对的对,则不对数组进行排序。
boolean sorted = true;
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i+1]) {
sorted = false;
break;
}
}
答案 1 :(得分: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;
}
答案 2 :(得分:2)
你可以在O(n)最坏情况线性时间内检查它。 未排序的数组(假设您的意思是按升序排序)将具有跳闸点。那是在某些时候arr [i]&gt;改编[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;
}
如果您的数组排序应该是降序,只需将>
更改为<
答案 3 :(得分:1)
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;
}
答案 4 :(得分:0)
较短的版本:
[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)
要小心,因为在某些情况下它不会有效,因为它会循环遍历整个阵列而不会过早破坏。
答案 5 :(得分:0)
您可以使用.every
let isSorted = array.every((v, i) => (i === 0 || v <= array[i - 1]))
|| array.every((v, i) => (i === 0 || v >= array[i - 1]))
答案 6 :(得分:0)
function isArraySorted(arr){
for(let i=0;i<arr.length;i++){
if(arr[i+1] && (arr[i+1] > arr[i])){
continue;
} else if(arr[i+1] && (arr[i+1] < arr[i])){
return false;
}
}
return true;
}
this worked for me.