В вашем коде есть какая-то проблема.
при первом использовании startIndex
и для этого найдите в своем массиве хорошее число, затем увеличьте его в конце кода, что является избыточным, поскольку при повторном вызове функции оноиспользуйте 0 для этого снова.каждый вызов функции имеет свою собственную переменную, поэтому при следующем вызове функции создайте новый startIndex
и снова используйте значение, равное нулю.
Вы должны передавать его функции и увеличивать при каждом следующем вызове функции.из-за этого ваша базовая проверка больше не является истинной, и она заменяется проверкой до тех пор, пока мы не получим в конце нашего массива.
также эта строка кода избыточна, потому что, когда мы добираемся до этой строки, мы знаем, что arr.lenghth()
больше чем один(однако наша логика кода изменилась, и в этом также нет необходимости)
if ( startIndex >= arr.length - 1 )
return;
возвращать, когда базовое условие, например, 1, лучше и исключение throw не требуется, поскольку, когда оно равно единице, мы возвращаемся безидти ниже.(условия всегда ложны для нулевого или пустого массива. Вы тоже ничего не удаляете из массива)
Я определяю рекурсивную функцию как функцию, которая сортирует массив из отправленного ему начального индекса.
Это результат:
public class GFG
{
public static void selectionSort_Rec(int[] arr) {
selectionSortHelper(arr, 0);
}
static void selectionSortHelper(int[] arr, int startIndex) {
if (startIndex >= arr.length)
return;
int minIndex = startIndex;
for (int index = startIndex + 1; index < arr.length; index++)
{
if (arr[index] < arr[minIndex])
minIndex = index;
}
int temp = arr[startIndex];
arr[startIndex] = arr[minIndex];
arr[minIndex] = temp;
selectionSortHelper(arr, startIndex + 1);
}
// Driver method
public static void main(String args[]) {
int arr[] = {3, 1, 5, 2, 7, 0};
// Calling function
selectionSort_Rec(arr);
for (int i : arr)
{
System.out.print(i + " ");
}
}
}
Надеюсь, это то, что вы хотите.