Сортировка массива строк в Java - PullRequest
0 голосов
/ 25 сентября 2011

В моем учебнике есть пример того, как сортировать строковые массивы, но мне трудно понять логику кода. У нас есть следующий массив:

String[] words = {"so", "in", "very", "every", "do"};

Сам метод выглядит следующим образом:

public static void sortArray(Comparable[] compTab) {
    for (int next=1; next < compTab.length; next++) {
        Comparable value = compTab[next];
        int this;
        for (this = next; this > 0 && value.compareTo(compTab[this-1]) < 0; this--) {
            compTab[this] = compTab[this-1];
        }
        compTab[this] = value;
        writeArray(next + " run through: ", compTab);
    }
}

Этот последний вызов writeArray приводит к тому, что следующий текст будет напечатан для первого прохода: "1. выполнить: так очень каждый делает"

OK. Как я уже сказал, у меня есть некоторые проблемы с логикой в ​​этом коде. Если мы пройдем цикл в первый раз, то вот что я вижу:

  1. Имеем: Comparable value = compTab[1]. Это означает, что значение = "в".

  2. Мы начинаем внутренний цикл с this = next (что == 1). Таким образом, Java будет проходить внутренний цикл только один раз. Оказывается, что для первого запуска value.compareTo(compTab[this-1]) действительно меньше 0. Таким образом, мы имеем: compTab[1] = compTab[0]. Это означает, что слово, которое раньше было в позиции [1], теперь заменяется словом, которое раньше было в позиции [0]. Таким образом, теперь у нас есть слово «так» в позиции [1] массива.

  3. Следующий шаг в методе: compTab[this] = value. Это где я запутался. Это говорит мне о том, что, поскольку это = 1, мы здесь получаем compTab[1] = value. Однако ранее в методе мы определили значение = «в». Это говорит мне, что позиция [1] в массиве снова принимает слово «in».

  4. Как я вижу, окончательная распечатка должна быть:

«1. Пробежать: так в любом деле».

Другими словами, как я следую логике кода, окончательная распечатка массива будет такой же, какой была до внедрения метода! Ясно, что здесь есть некоторая часть моей логики, которая не верна. Например - я не вижу, как слово, которое раньше было в позиции [1], теперь находится в позиции [0]. Если кто-нибудь может помочь мне объяснить это, я был бы очень признателен!

Ответы [ 2 ]

1 голос
/ 17 февраля 2015
public class A {

static  String Array[]={" Hello " , " This " , "is ", "Sorting ", "Example"};
String  temp; 


public static void main(String[] args)

{    

 for(int j=0; j<Array.length;j++)
 {
     for (int i=j+1 ; i<Array.length; i++)
     {
         if(Array[i].trim().compareToIgnoreCase(Array[j].trim())<0)
         {
             String temp= Array[j];
             Array[j]= Array[i]; 
             Array[i]=temp;


         }
     }

     System.out.print(Array[j]);
 }
}

}

1 голос
/ 25 сентября 2011

Проблема в следующем заявлении:

Следующий шаг в методе: compTab [this] = value. Это где я смутиться. Это говорит мне, что, поскольку это = 1, мы здесь получаем compTab [1] = значение. Однако ранее в методе мы определили значение = "в". Это говорит мне, что позиция [1] в массиве еще раз предполагает слово "в".

Поскольку вы один раз проходили цикл (см. Ваше утверждение 2), this-- также был выполнен один раз и, следовательно, this==0.

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