Zitat von Sidolin probiers mal mit
Code:
................if ( ! inserted) {
................inserted = true;
................umordnen[i] = zahl;
................} else {
................umordnen[i] = topTen[i-1];
................}
Knapp. Für die geforderte Funktion bei "Eingabe von 3 2 1 0" musst du iirc _nur_ die beiden obigen ehemaligen ifs umdrehen, wenn das doch mehr können sollte wäre die genaue Aufgabenstellung sicher hilfreich.
Damit das auch mit aufsteigenden und gemischten Werten funktioniert hab ich, nachdem ich irgendwann absolut keinen Bock mehr hatte, den einen kleinen nicht-logischen Fehler da drin zu finden Folgendes produziert:
Code:
import java.util.Scanner;
public class B10A4 {
public static void main(String[] args) {
Scanner eingabe = new Scanner(System.in);
int[] topTen = new int[10];
int[] umordnen = new int[10];
int zahl;
do{
System.out.print("Punktzahl eingeben: ");
zahl = eingabe.nextInt();
for ( int i = 0; i < 10; i++) {
if (zahl <= topTen[i]) {
umordnen[i] = topTen[i];
} else {
int wtf = umordnen[i];
for (int amarsch = topTen.length - 1; amarsch > i; amarsch--) {
umordnen[amarsch] = umordnen[amarsch-1];
}
umordnen[i] = zahl;
umordnen[i+1] = wtf;
break;
}
}
topTen = umordnen;
} while (zahl > 0);
System.out.println("TOP TEN:");
for ( int i = 0; i < 10; i++) {
System.out.println(i+1+". "+topTen[i]);
}
}
} Ob das nun überhaupt noch ein vergleichbarer Sortieralgorithmus ist, möge sich der geneigte Coder selbst überlegen.. ¬.¬
--edit--
Was auch immer ich da mit dem Vertauschungskram zusätzlich wollte.. Bei halbwegs wacher Betrachtung, einfach das in jedem Eingabe-durchlauf schon monoton absteigende Array abgrasen bis und sofern die passende Stelle gefunden wurde Eingabe einfügen, freunde der Perfektion:
Code:
import java.util.Scanner;
public class IS {
public static void main(String[] args) {
Scanner eingabe = new Scanner(System.in);
int[] topTen = new int[10];
int zahl;
do{
System.out.print("Punktzahl eingeben: ");
zahl = eingabe.nextInt();
for (int i = 0; i < topTen.length; i++) {
if (zahl > topTen[i]) {
for (int j = topTen.length - 1; j > i; j--) {
topTen[j] = topTen[j-1];
}
topTen[i] = zahl;
break;
}
}
} while (zahl > 0);
System.out.println("TOP TEN:");
for (int i = 0; i < topTen.length; i++) {
System.out.println(i+1+". "+topTen[i]);
}
}
} Hat natürlich noch weniger mit dem ursprünglichen Code zu tun..
Akademische Frage: wäre das der Definition nach immer noch O(n), da ja logisch betrachtet immer höchstens 10 Durchläufe stattfinden? Lala.
Anyway, je nachdem wie weit "Fehler" da nun interpretiert werden darf usw, tötet Java.