Возникли проблемы при проверке сортировки массива с помощью рекурсии - PullRequest
0 голосов
/ 05 октября 2018

Это вопрос: массив сортируется (в порядке возрастания), если каждый элемент массива меньше или равен следующему элементу.

Написать метод с логическим значением isSorted, который принимаетцелочисленный массив, а также количество элементов в массиве и возвращает, отсортирован ли массив.

Перед показом кода: моя логика заключается в том, что оператор if else-if и else должен сначала определить, равен ли размер массива 0,1 или 2. Это потому, что когда размер равен 1 или 2, программа должна сломаться.Если размер больше 2, программа должна проверить arr [size-1]> arr [size-2], а затем снова вызвать метод с уменьшенным размером, если это правда, и просто вернуть false, если это не так.Когда я запустил эту программу, следующие 2 теста не прошли: [1,3,2,4] и [2,1,2,3,4].Из-за этого я указал, что когда размер равен 2, метод возвращает false, если arr [0]> arr [1], однако это не сработало.Что я делаю неправильно?Я не хочу просто искать ответ, потому что я готовлюсь к тесту, поэтому мне жаль, если есть повторные ответы.

Я знаю, что цикл лучше, я просто хотел изучить рекурсию

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 голосов
/ 05 октября 2018

Рекурсия не является хорошим способом решения этой проблемы.Что если ваш массив будет очень большим, и вы можете получить 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;
}
0 голосов
/ 05 октября 2018

Вам необходимо вернуть результат из 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...