Ich übe Java und kann eine Bubble-Sortierung auf einem int [] -Array erhalten. Ich sah, ob ich ein schwierigeres Beispiel für mich selbst machen könnte, also habe ich eine ArrayList mit zufälliger Länge mit Zufallszahlen in jedem Element erstellt.Java Bubble sort auf randomisierten ListArray
Das Problem ist, wenn Blasensortierung durchgeführt wird, manchmal wird nichts gedruckt, nachdem bubbleSort2 aufgerufen wird. Und aus irgendeinem Grund kann ich keine foreach-Schleife in der bubbleSort2-Methode verwenden.
Lassen Sie mich auch wissen, wenn meine Verwendung von List und ArrayList in Ordnung ist.
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:
Ich habe mein Problem gelöst. Wie hier und von Freunden an anderer Stelle erwähnt, falle ich manchmal in eine Endlosschleife, wenn die if-Bedingung niemals erfüllt wird. Also eine Zeile Code mostRightSwap = 0
; wird hinzugefügt, um die while-Bedingung vor der if-Anweisung zu fälschen, falls die if-Anweisung nicht ausgeführt wird.
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;
}
}
}
}
mit '' 'für (int i = 0; i <(int) (Math.random() * (max - min) + min); i ++)' '' es nimmt einen neuen Zufallswert _jeder Iteration_. Sie müssen das zufällige in einer Variablen speichern und dann '' i''' dagegen vergleichen. –
"Ich kann keine foreach-Schleife in der bubbleSort2-Methode verwenden" Warum nicht? – glglgl
Um sich wirklich herauszufordern, sollten Sie es generisch machen, nachdem Sie Ihre aktuellen Probleme natürlich behoben haben - https://docs.oracle.com/javase/tutorial/java/generics/types.html –