Я практикую Java и могу получить сортировку пузырьков, работающих с массивом int []. Я видел, могу ли я сделать более трудный пример для себя, поэтому я сделал случайную длину ArrayList со случайными числами в каждом элементе.Java Bubble сортировать по рандомизированному ListArray
Проблема заключается в том, что сортировка пузырьков иногда не печатается после вызова bubbleSort2. И по какой-то причине я не могу использовать foreach-loop в методе bubbleSort2.
Также дайте мне знать, если мое использование List и ArrayList в порядке.
import java.util.ArrayList;
import java.util.List;
public class BubbleSort
{
public static void main(String[] args)
{
List<Integer> myList2 = new ArrayList<Integer>();
int min = 2;
int max = 30;
for (int i=0; i<(int)(Math.random() * (max - min) + min); i++)
{
myList2.add((int)(Math.random() * 100));
}
System.out.println("Unsorted list 2");
for (int element: myList2)
{
System.out.print(element + " ");
}
System.out.println("");
System.out.println("Bubble sorted list 2 (BubbleSort2)");
bubbleSort2(myList2);
for(int element: myList2)
{
System.out.print(element + " ");
}
}
public static void swap2(List<Integer> x, int i, int j)
{
Integer temp = x.get(i);
x.set(i, x.get(j));
x.set(j, temp);
}
public static void bubbleSort2(List<Integer> x)
{
int mostRightSwap = x.size() - 1;
while (mostRightSwap > 0)
{
for (int i=0; i<x.size()-1; i++)
{
if (x.get(i) > x.get(i + 1))
{
swap2(x, i, i + 1);
mostRightSwap = i;
}
}
}
}
}
Update:
я понял мою проблему. Как указано здесь и друзьями в другом месте, я иногда попадаю в бесконечный цикл, когда условие if никогда не выполняется. Итак, строка кода mostRightSwap = 0
; добавляется для фальсификации условия while перед оператором if только в том случае, если инструкция if не выполняется.
public static void bubbleSort(List<Integer> x)
{
int mostRightSwap = x.size() - 1;
while (mostRightSwap > 0)
{
int right = mostRightSwap;
mostRightSwap = 0;
for (int i=0; i<right; i++)
{
if (x.get(i) > x.get(i+1))
{
swap2(x, i, i+1);
mostRightSwap = i;
}
}
}
}
с '' 'for (int i = 0; i <(int) (Math.random() * (max - min) + min); i ++)' '' он принимает новое случайное значение _и вся итерация_. Вам нужно сохранить случайное значение в переменной, а затем сравнить '' 'i''' с этим. –
«Я не могу использовать петлю foreach в методе bubbleSort2« Почему бы и нет? – glglgl
Чтобы действительно бросить вызов себе, вы должны сделать это Generic после того, как исправите свои текущие проблемы, конечно. Https://docs.oracle.com/javase/tutorial/java/generics/types.html –