Ist dieses Struktogramm passend für mein Merge-Sort Code?
Ist das folgende Struktogramm, welches ich erstellt habe, passend zu meinem Java Merge-Sort Code oder muss ich noch was nachbessern?
Code:
import java.util.Arrays;
import java.util.Random;
public class MergeSortWithMetrics {
// Zähler für Sortierschritte
static long comparisons = 0;
static long assignments = 0;
public static void main(String[] args) {
// Konfiguration: Array-Größe und Zahlbereich
int arraySize = 10000; // Größe des Arrays
int numberRange = 214748647; // Bereich der Zufallszahlen (0 bis numberRange)
boolean ArrayAusgebenAn = false;
boolean StatistikenAn = true;
// Zufälliges Array erstellen
int[] array = generateRandomArray(arraySize, numberRange);
if (ArrayAusgebenAn){
System.out.println("Unsortiertes Array:");
System.out.println(Arrays.toString(array));
}
// Zeitmessung starten
long startTime = System.currentTimeMillis();
// MergeSort aufrufen
int[] sortedArray = mergeSort(array);
// Zeitmessung beenden
long endTime = System.currentTimeMillis();
// Sortiertes Array ausgeben
if (ArrayAusgebenAn){
System.out.println("Sortiertes Array:");
System.out.println(Arrays.toString(sortedArray));
}
// Statistiken ausgeben
if (StatistikenAn){
System.out.println("Sortierschritte:");
System.out.println("Vergleiche: " + comparisons);
System.out.println("Zuweisungen: " + assignments);
System.out.println("Zeitmessung: " + (endTime - startTime) + " ms");
}
}
// Funktion, um ein zufälliges Array zu generieren
public static int[] generateRandomArray(int size, int range) {
Random random = new Random();
int[] array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = random.nextInt(range);
}
return array;
}
// MergeSort-Algorithmus
public static int[] mergeSort(int[] array) {
if (array.length <= 1) {
return array;
}
// Array in zwei Hälften teilen
int mid = array.length / 2;
int[] left = Arrays.copyOfRange(array, 0, mid);
int[] right = Arrays.copyOfRange(array, mid, array.length);
// Rekursive Sortierung der Hälften
left = mergeSort(left);
right = mergeSort(right);
// Zusammenfügen der sortierten Hälften
return merge(left, right);
}
// Merge-Funktion: Zwei sortierte Arrays zusammenfügen
public static int[] merge(int[] left, int[] right) {
int[] merged = new int[left.length + right.length];
int i = 0, j = 0, k = 0;
// Elemente vergleichen und in das neue Array einfügen
while (i < left.length && j < right.length) {
comparisons++;
if (left[i] <= right[j]) {
merged[k++] = left[i++];
} else {
merged[k++] = right[j++];
}
assignments++;
}
// Restliche Elemente hinzufügen
while (i < left.length) {
merged[k++] = left[i++];
assignments++;
}
while (j < right.length) {
merged[k++] = right[j++];
assignments++;
}
return merged;
}
}
1 Antwort
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Java, Informatik
Wenn du schon einen Java-Code hast sollte es auch Programme geben, die dir daraus automatisch ein Struktorgramm erstellen.
Deine erste If-Abfrage im Struktogramm entspricht nicht der im Code. Der Rest passt auch nicht.
Hast du das üverhaupt selbst geschrieben? Wenn nicht, mach das einfach, es ist wirklich simpel. Du musst ja quasi nur deinen Code durchgehen und dann als Struktogramm aufschreiben.