2012-02-01 3 views
0

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

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)); 

} 
} 

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

+6

Какая ошибка? –

+1

вы получаете ошибку на этой строке, потому что переменные «вниз» и «вверх» не определены в статической области класса. Они определяются только в рамках метода «раздела». Вам нужно будет передать фактические значения в метод или определить локальные переменные в «основном» методе «вниз» и «вверх». – ggreiner

+5

** Первое, что нужно сделать, чтобы ваши пальцы после ввода «Я получаю сообщение об ошибке» или «Я получаю исключение» - это начать вводить ** точное сообщение об ошибке **, которое вы получаете, а также любую другую информацию например номера строк или адреса памяти. Если вы этого не сделаете, это значительно усложнит ситуацию, когда другие обнаружат ошибку в вашем коде, и усложнение для нас затрудняет вам получение вашего ответа. Пожалуйста, помните, что мы не можем видеть ваш экран или читать ваш ум отсюда; это намного проще, если вы предоставите нам информацию. :) –

ответ

6

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

+0

Спасибо, теперь он работает. Как я могу распечатать весь отсортированный массив, а не только i? – Brett

+0

Нет проблем. Чтобы напечатать массив, проверьте Arrays.toString (int []) – Laf

+0

Я поставил: System.out.println (Arrays.toString (partitionName, down, up))); но я получаю сообщение об ошибке: «Метод toString (long []) в типе Arrays не применим для аргументов (int)» – Brett

0

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

потому up и down являются не инициализируется и в Java, он делает их 0

так вниз идет на j:

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

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

+1

Это не обязательно в Java; язык и библиотеки справятся с этим для вас. – templatetypedef

0

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

Например:

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

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

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

+0

Это совсем не обязательно. –

+0

Я не думаю, что это решает проблему. Хотя метод возвращает int, он выполняет сортировку по ссылке массива, поэтому он должен иметь возможность печатать массив после вызова раздела. Хотя реализация раздела неверна. – ggreiner

+0

Благодарим вас за заявление печати, однако при попытке его использования я получаю сообщение об ошибке. Он подчеркивает часть toString и говорит: метод toString (long []) в массиве типа не применим для аргументов (int) – Brett

Смежные вопросы