3 Zahlen in Java aufsteigend sortieren?
Hallo,
ich würde gerne 3 Variablen aufsteigend sortieren mit nur if/else Anweisungen. Habe das was gemacht und es funktioniert auch, aber irgendwie kommt mir das ein wenig lang vor^^ Hat da vielleicht jemand eine kürzere Version?
Danke
if (A>B && A>C ||B==C || A==B && A==C && B==C) {
if (B>=C && C<A || A<C) {
if (A<C) {
System.out.print(A+" , "+B+" , "+C);}
else System.out.print(C+" , "+B+" , "+A);}
else System.out.print(B+" , "+C+" , "+A);}
if (B>A && B>C || A==C && A!=B) {
if (A>=C && C<B || B<C) {
if (B<C) {
System.out.print(B+" , "+B+" , "+A);}
else System.out.print(C+" , "+A+" , "+B);}
else System.out.print(A+" , "+C+" , "+B);}
if (C>A && C>B || A==B && A!=C) {
if (A>=B && A<C || C<A) {
if(C<A) {
System.out.print(C+" , "+B+" , "+A);}
else System.out.print(B+" , "+A+" , "+C);}
else System.out.print(A+" , "+B+" , "+C);}
4 Antworten
Da es nur 6 mögliche Fälle gibt wäre es am kürzesten, einfach für jeden Fall ein If zu machen:
if (a < b && a < c && b < c) System.out.println(a + ", " + b + ", " + c);
else if (a < b && a < c && c < b) System.out.println(a + ", " + c + ", " + b);
else if (b < a && b < c && a < c) System.out.println(b + ", " + a + ", " + c);
else if (b < a && b < c && c < a) System.out.println(b + ", " + c + ", " + a);
else if (c < a && c < b && a < b) System.out.println(c + ", " + a + ", " + b);
else System.out.println(c + ", " + b + ", " + a);
Aber normalerweise benutzt man für sowas Sortieralgorithmen, oder zumindest Funktionen wie Math.min() und Math.max().
Wenn du einfach nur drei Zahlen sortiert ausgeben willst, ist der Aufwand viel zu groß. Das könntest du auch so machen:
System.out.println(Arrays.toString(IntStream.of(a, b, c).sorted().toArray()));
Oder falls du Streams noch nicht kennst, kannst du es auch mit einem Array machen:
int[] zahlen = {a, b, c};
Arrays.sort(zahlen);
System.out.println(Arrays.toString(zahlen));
Aber um deine Frage zu beantworten:
Wenn es wirklich mit drei getrennten Variablen und ohne integrierte Sortieralgorithmen und nur mit ifs sein soll, würde ich es am ehesten so machen:
if (a<b) {
if (a<c) {
if (b<c) {
System.out.printf("%d, %d, %d", a, b, c);
} else {
System.out.printf("%d, %d, %d", a, c, b);
}
} else {
System.out.printf("%d, %d, %d", c, a, b);
}
} else {
if (b<c) {
if (a<c) {
System.out.printf("%d, %d, %d", b, a, c);
} else {
System.out.printf("%d, %d, %d", b, c, a);
}
} else {
System.out.printf("%d, %d, %d", c, b, a);
}
}
Ein wenig systematischer finde ich die folgende Vorgehensweise:
def sort(a, b, c):
# Schiebe das groesste Element nach hinten
if a >= b:
a, b, c = b, a, c
if b >= c:
a, b, c = a, c, b
# Bringe die ersten beiden Variablen in die richtige Reihenfolge
if a >= b:
return b, a, c
return a, b, c
Das ist Bubblesort für Eingaben der Länge 3.
Vom Prinzip geht es nicht viel einfacher, solange du keine Zuweisungen verwendest.
Von der Anordnung her gibt 3! = 6 verschiedene Eingaben (n! ist die Anzahl der möglichen Permutationen auf n Elementen), also brauchst du auch 6 verschiedene Ausgaben.
Die Auswahl der Ausgabe sollte in einem binären Entscheidungsbaum der Tiefe 3 möglich sein. Den würde ich einfach mal beginnend mit alle möglichen Ausgaben aufzeichnen, dann solltest du auch kürzere Bedingungen finden.