无法检查数组是否使用递归排序

时间:2018-10-05 16:31:48

标签: java algorithm sorting recursion

这是一个问题:如果数组的每个元素小于或等于下一个元素,则对数组进行排序(升序)。

编写一个名为isSorted的布尔值方法,该方法接受一个整数数组以及该数组中元素的数量,并返回是否对数组进行排序。

在显示代码之前:我的逻辑是,if else-if和else语句应首先确定数组的大小是0、1还是2。这是因为,当大小等于1或2时,程序必须休息。当大小大于2时,程序应检查arr [size-1]> arr [size-2],然后如果大小为true,则以减小的大小再次调用该方法,如果大小为true,则返回false。当我运行该程序时,以下2个测试失败:[1,3,2,4]和[2,1,2,3,4]。因此,我指定了当大小等于2时,如果arr [0]> arr [1],该方法返回false,但是它不起作用。我究竟做错了什么?我不想只是查找答案,因为我正在学习考试,因此对重复的答案感到抱歉。

我知道循环更好,我只是想研究递归

public boolean isSorted(int[] arr, int size) { 


    if(size == 0 || size == 1) { 

         return true; 

    } else if (size == 2) { //this is the part I don't get. 

        if (arr[0] > arr[1]) { 

            return false; 

        } else { 

             isSorted(arr,size-1); 
             return true;   

        }


    } else {

         if (arr[size-1] < arr[size-2]) { 

             return false;  

         } else { 

            isSorted(arr, size-1); 
            return true; 

         }

    }

}

2 个答案:

答案 0 :(得分:3)

递归不是解决此问题的好方法。如果您的数组很大并且可以得到StackOverflowError,该怎么办。为什么不使用简单的if运算符:

public static boolean isSorted(int[] arr, int size) {
    if (arr.length >= 2)
        for (int i = 1; i < arr.length; i++)
            if (arr[i - 1] > arr[i])
                return false;

    return true;
}

答案 1 :(得分:1)

您需要从isSorted返回结果,例如,更改:

isSorted(arr, size-1); 
return true; 

return isSorted(arr, size-1); 

而且,案例else if (size == 2)是多余的。 size 2应该与size 3, 4, 5, ...

具有相同的逻辑

完整代码:

public boolean isSorted(int[] arr, int size) {
    if (size == 0 || size == 1) {
        return true;
    } else {
        if (arr[size - 1] < arr[size - 2]) {
            return false;
        } else {
            return isSorted(arr, size - 1);
        }
    }
}