2014-09-05 7 views
-4

Я нахожусь в курсе Java и просто пытаюсь опередить кривую с некоторой практикой, поэтому я делаю программу сортировки пузырьков. По какой-то причине он будет проходить только через внешний цикл дважды.Java Bubble Сортировать Iterates Only Twice

public ArrayList SortArray(ArrayList<Integer> u) { 
    int temp; 
    int spot; 
    for (int isOrdered = 1; isOrdered == 1;) { 
     for (spot = 0; spot < u.size() - 1; spot ++) { 
      System.out.println(u.get(spot) + " " + u.get(spot + 1) + " " + spot); 
      if (u.get(spot) > u.get(spot + 1)) { 
       temp = u.get(spot + 1); 
       u.set(spot + 1, u.get(spot)); 
       u.set(spot, temp); 
       isOrdered = 1; 
      } 
      else { 
       isOrdered = 0; 
      } 
     } 
    } 
    return u; 
} 

Насколько я могу сказать, что происходит после второй итерации, он не сбрасывает «пятно» на 0, так что не проходит через петлю снова. Есть идеи?

+5

Как только внутренний контур выходит с 'isOrdered', установленным на 0, внешний контур выйдет. Это произойдет, когда последние два элемента массива уже в порядке. Вам нужно вернуться к чертежной доске с вашей логикой. –

+1

Вы должны попробовать использовать отладчик и пройти через свой код – dehrg

+0

можете ли вы разместить свои входы образцов в своем арраисте –

ответ

0

Ну, для начала это необычный способ использования цикла for для реализации цикла while. Попробуйте использовать boolean для isOrdered и while(!isOrdered) для такого утверждения.

Как сказал комментарий Теда Хоппа, ваша логика не совсем правильная. Что делает ваш код, так это то, что он будет сортировать одно значение в списке, и как только это значение «пузырится», ваш флаг имеет значение true.

Вам нужно, чтобы ваше внешнее состояние цикла продолжало работать до тех пор, пока все ячейки не будут в порядке.

Прямо сейчас ваш флаг просто говорит, что он отсортирован, когда вы просмотрели список, но то, что ему нужно сделать, это быть правдой, когда оно перешло через список , не выполнив обмен.

Попробуйте реализовать это, не глядя, тогда, если вы не можете его получить (я предполагаю, что вы заинтересованы в этом, так как вы работаете в своем классе), посмотрите на образец here.

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