Сортировать массив - рекурсивный вызов - PullRequest
0 голосов
/ 31 мая 2018

Я пишу код для сортировки массива по порядку.Я проверил некоторый алгоритм сортировки и слияния, однако обнаружил, что если я просто пройду через массив и сравню каждые 2 элемента, поменяю их местами и повторю, пока массив не будет отсортирован.Так что если array [I]> array [i ++], поменяйте местами, повторите.

Пока не работает.Мне также нужна точка останова, чтобы избежать переполнения стека: мне нужна помощь, пожалуйста

Массив:

    int[] newArray = new int[] {3,9,5,7,4,6,1};

    SortArray s = new SortArray();

    s.sortThisArray(newArray, 0, 0);

Рекурсивная функция:

public String sortThisArray(int[] array, double counter, double a)
{
    int swap0 = 0; 
    int swap1 = 0; 

    if (a > 1000)
    {
        return "reached the end" ; 
    }

    for (int i =0; i<array.length; i++)
    {
        if (array[i] > array[i++])
        {
            swap0 = array[i];
            swap1 = array[i++];
            array[i++] = swap0; 
            array[i] = swap1; 

            counter = counter++; 
            a = array.length * counter; 

            sortThisArray (array, counter, a); 
        }
    }

    for (int j = 0; j<array.length ; j++)
    {
        System.out.println(array[j]);
    }
    return "completed"; 
}

}

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Оператор ++ обрабатывается отдельно.Таким образом, в случае i ++ мы будем читать i, а затем увеличивать его на 1. И наоборот, ++ i, сначала применяет приращение к i, а затем читает i.Поэтому, когда вы хотите проверить следующий элемент в массиве, [i+1] - это то, что вы ищете.С тем же рассуждением, вы можете выяснить, что не так с этой строкой?

counter = counter++;

И нужна ли она нам вообще?

0 голосов
/ 31 мая 2018

То, что вы ищете, это алгоритм рекурсивной сортировки пузырьков .

Основная ошибка - путаница i ++ (который каждый раз увеличивает i) с i + 1, то есть только позиция вмассив после i, без приращения.Тогда нет необходимости использовать double для counter, а также переменная a не нужна.Вам нужна только длина текущего сегмента, таким образом:

import java.util.*;
public class RecursiveBubbleSort {

public static void main(String[] args) throws Exception {
    int[] newArray = new int[] {3,9,5,7,4,6,1};

sortThisArray(newArray, newArray.length);

    System.out.println("Sorted array : ");
    System.out.println(Arrays.toString(newArray));
}

public static int[] sortThisArray(int[] array, int n) {
    if (n == 1) {
        return array; //finished sorting
    }

    int temp;
    for (int i = 0; i < n-1; i++) {
        if (array[i+1] < array[i]) {
            temp = array[i];
            array[i] = array[i+1];
            array[i+1] = temp;
        }
    }
    return sortThisArray(array, n-1);
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...