Aufgabe
Modifizieren Sie unten stehende Implementierung derart, dass nach jedem Durchlauf- das Ende des sortierten Bereich mit einem senkrechten Strich markiert wird
- das neu eingefügte Element von runden Klammern umgeben dargestellt wird
- das nächste einzufügende Element als Zahl und
- alle weiteren Elemente des unsortierten Bereichs als Punkte dargestellt werden
Der Output sollte für die Eingabe 8, 99, 9 wie folgt aussehen:
33 61 85 38 17 02 35 39
33| 61 . . . . . .
33 61| 85 . . . . .
33 61 85| 38 . . . .
33 (38) 61 85| 17 . . .
(17) 33 38 61 85| 02 . .
(02) 17 33 38 61 85| 35 .
02 17 33 (35) 38 61 85| 39
02 17 33 35 38 (39) 61 85|
02 17 33 35 38 39 61 85
jedoch wird bei meiner implementierung die Klammer () immer in einer Zeile davor eingefügt.
Java:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] a = testData(sc.nextInt(), sc.nextInt(), sc.nextInt());
printArray(a);
insertion(a);
printArray(a);
sc.close();
}
public static int[] testData(int size, int max, int seed) {
int[] a = new int[size];
Random r = new Random(seed);
for (int i = 0; i < a.length; i++)
a[i] = r.nextInt(max);
return a;
}
public static void insertion(int[] numbers) {
for (int i = 1; i < numbers.length; i++) {
int j = i;
int tmp = numbers[i];
boolean sort = numbers[j] < numbers[j - 1];
printArrayWithMarkers(numbers, i, j, sort);
while (j > 0 && tmp < numbers[j - 1]) {
numbers[j] = numbers[j - 1];
j--;
}
numbers[j] = tmp;
}
}
public static void printArray(int[] arr) {
for (int i : arr) {
System.out.printf(" %02d ", i);
}
System.out.println();
}
private static void printArrayWithMarkers(int[] arr, int i, int j, boolean sort) {
for (int k = 0; k < arr.length; k++) {
if (sort && k == j) {
System.out.printf("(%02d) ", arr[k]);
} else if (k == i - 1) {
System.out.printf(" %02d| ", arr[k]);
} else if (k == i || k < i) {
System.out.printf(" %02d ", arr[k]);
} else {
System.out.printf("%3c ", '.');
}
}
System.out.println();
}