繁体   English   中英

如何检查数组是否在javascript中使用递归排序?

[英]how to check array is sorted or not using recursion in javascript?

我正在尝试编写一个函数,它给我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))

从基本情况开始:如果数组的长度为 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 ]))

不需要创建新的数组对象(就像使用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]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM