Быстрая сортировка на Java - PullRequest
       14

Быстрая сортировка на Java

0 голосов
/ 02 февраля 2012

Я должен выполнить алгоритм быстрой сортировки в Java для сортировки массива {50, 20, 65, 30, 75, 25, 90}.Вот что у меня есть:

public class QuickSort {
public static int partition(int arrayName[], int down, int up){
    int i = down, j = up;
    int temp;
    int pivot = arrayName[(down + up) / 2];

    while (i <= j){
        while (arrayName[i] < pivot)
            i++;
        while (arrayName[j] > pivot)
            j--;
        if (i <= j){
            temp = arrayName[i];
            arrayName[i] = arrayName[j];
            arrayName[j] = temp;
            i++;
            j--;

        }
    }
    return i;

}
public static void main(String[] args) {
    int [] arrayName = {50, 20, 65, 30, 75, 25, 90};

    System.out.println(partition(arrayName, down, up)); 

}
}

Я получаю сообщение об ошибке в операторе печати (кажется, у меня много проблем с этим), в котором говорится, что переменные типа down и up не могут быть разрешены.Как я могу это исправить, чтобы я мог успешно распечатать отсортированный список?

Ответы [ 3 ]

6 голосов
/ 02 февраля 2012

Это потому, что вы не определили переменные с именами down и up в своем методе main. Вы должны указать значения вместо этих имен.

0 голосов
/ 02 февраля 2012

Ваш метод partition возвращает int. Вместо этого измените тело метода так, чтобы оно возвращало вновь отсортированный массив (и убедитесь, что вы также изменили тип возвращаемого значения в объявлении метода, иначе вы получите ошибку). Кроме того, вам необходимо определить up и down в методе main.

Например:

public static int[] partition(...)
{
...
return arrayname;
}

Редактировать: кроме того, вам может понадобиться использовать Arrays.toString() для правильного вывода массива (прошло много времени с тех пор, как я использовал Java). например:

System.out.println(Arrays.toString(partition(arrayName, up, down)));

0 голосов
/ 02 февраля 2012

вы получаете индекс вне пределов,

, потому что up и down не инициализированы, а в Java это делает их 0

, поэтому значение понижается до j:

while(arrayName[j]<pivot){ //<--- this will thow exception as j starts at 0
  j--;

, что приводит к -1 и доступ к массиву в arrayName[-1] выходит за пределы.

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