как проверить массив отсортирован или не использовать рекурсию в javascript? - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь написать одну функцию, которая дает мне array is sorted or not .Если она отсортирована, то возвращает true иначе false. Я хочу сделать это, используя recursion

n = [1, 2, 3]
function isSorted(arr, n) {
    if (n > arr.length || n ==0) {
        return false
    }

    if (arr[n] < arr[n-1]) {
        return false
    } else {
        return true
    }
    return isSorted(arr,n-1)
}

console.log(isSorted(n,n.length-1))

в настоящее время это дает мне false, но ожидается true

обновление

function isSorted(arr, n) {
    if (n ==0 || n ==1) {
        return false
    }

    if (arr[n] < arr[n-1]) {
        return false
    } else {
        return true
    }
    return isSorted(arr,n-1)
}

console.log(isSorted(n,n.length-1))

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

Начните с базового случая: если массив имеет длину 1 или 0, то он сортируется.

В противном случае он сортируется только в том случае, если первый элемент меньше или равен второму, а остальная часть массива также отсортирована. В коде это может выглядеть так:

function isSorted(arr) {
   return arr.length <= 1
   ? true
   : arr[0] <= arr[1] && isSorted(arr.slice(1))
}

console.log(isSorted([1, 2, 3 ]))
console.log(isSorted([1, 1, 1 ]))
console.log(isSorted([0]))
console.log(isSorted([1, 4, 3 ]))
1 голос
/ 18 марта 2020

Нет необходимости создавать новые объекты массива (как это происходит при использовании slice). Вы можете просто рекурсивно перебирать исходный массив, как показано функцией check:

function isSorted(arr) {
  var i = 0;
  var last = arr.length - 1;
  return (function check() {
    return (i >= last) || (arr[i] <= arr[++i] && check());
  })();
}

console.log(isSorted([1, 2, 3 ]))
console.log(isSorted([1, 1, 1 ]))
console.log(isSorted([0]))
console.log(isSorted([]))
console.log(isSorted([1, 4, 3 ]))
console.log(isSorted([10, 5]))
console.log(isSorted([3, 5, 0]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...