簡體   English   中英

無法檢查數組是否使用遞歸排序

[英]Having trouble checking if an array is sorted using 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; 

         }

    }

}

遞歸不是解決此問題的好方法。 如果您的數組很大並且您會得到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;
}

您需要從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);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM