2016-01-30 2 views
1

Итак, у меня есть arraylist, который я хочу, чтобы мне нужно сортировать с помощью алгоритма сортировки вставки для класса программирования. Я это и ArrayList, содержащие эти струны = (Andrew, Felip, Хуан, Камил, Jhon, William) и у меня есть этот Java код:Вставка сортировки алгоритма Java в arraylist String

public void insertionSort() 
    { 

     ArrayList<Reserve> array = giveReserves(); 

     for(int i = 1 ; i < array.size()-1; i++) 
     { 
      Reserve element = array.get(i); 
      String nomI = element.giveNameClient(); 
      int j = i; 
      String nomJM = array.get(j-1).giveNameClient(); 
      String nomJ = array.get(j).giveNameClient(); 
      while(j > 0 && (nomJM.compareTo(nomJ) > 0)) 
      { 
       Reserve temp = array.get(j); 
       array.set(j, array.get(j-1)); 
       array.set(j-1, temp); 
       j = j-1; 
      } 
     } 
    } 

So У меня есть отель, который имеет ArrayList из резерва, каждый резерв имеет имя клиента, который это сделал. То, что я хочу сделать, - это отсортировать резервный массив ArrayList по имени клиента.

Так у меня есть метод, который печатает каждый клиент имя, как это:

public void showNames() 
    { 
     for(Reserve x: reserves) 
     { 
      System.out.print(x.giveNameClient() +" "); 
     } 
    } 

в основном() методе я напечатать имена клиентов до сортировки, а затем сортируются. Кстати, арреалист резервов находится в классе Test.

public static void main(String args[]) 
    { 
     Test object = new Test(); 
     System.out.println("Names: "); 
     object.showNames(); 
     object.insertionSort(); 
     System.out.println(); 
     System.out.println("after sorting: "); 
     object.showNames(); 
    } 

Теперь, когда я скомпилировать это я получаю следующее:

Names: 
Juan Jhon Camil William Andrew Felip 
after sorting: 
Andrew Camil Jhon Juan William Felip 

Дело в том, что выход должен быть Эндрю Camil Felip Jhon Juan William

Спасибо.

+0

Проверьте состояние своей петли. Вы игнорируете последний элемент в своем списке – Eran

+0

Да, я знаю, что игнорирую этот последний элемент, но я не могу понять, почему – ravelinx

+0

См. [Это] (http://webthanga.blogspot.in/2016/02/generic-type-insertion -sort-this-below.html) для общей сортировки вставки – Thanga

ответ

1

Это должно дать вам желаемый результат. В вашем коде есть множество проблем. Вы пропускаете элементы в массиве с определением цикла .

String[] inputArray = {"Juan", "Jhon", "Camil", "William", "Andrew", "Felip"}; 
for(int i = 1; i < inputArray.length; i++) { 
    String key = inputArray[i]; 
    int j = i - 1; 

    while (j >= 0 && key.compareTo(inputArray[j]) < 0) { 
     inputArray[j + 1] = inputArray[j]; 
     j--; 
    } 
    inputArray[j + 1] = key; 
} 
System.out.println(Arrays.toString(inputArray)); 
+0

Спасибо, что сделал – ravelinx

1

Попробуйте изменить условия цикла на: i < array.size() вместо i < array.size()-1.

Использование i < array.size()-1 имеет смысл, когда вы обращаетесь элементы в i и i+1, но вы, кажется, чтобы получить доступ к элементам в i и i - 1.

+0

Я изменил размер() - только 1 по размеру(), и выход, который я получил, был Felip Andrew Camil Jhon Juan William. Так что Фелип все еще не в порядке, я не знаю, почему. – ravelinx

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