Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:sorting:radixsort:start [01.07.2025 08:48] – Frank Schiebel | faecher:informatik:oberstufe:algorithmen:sorting:radixsort:start [07.07.2025 19:01] (aktuell) – Frank Schiebel | ||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
Radixsort sortiert die Elemente einer Liste, indem er sie nach einzelnen Ziffern (Stellenwerten) gruppiert, meistens beginnend mit der niederwertigsten Ziffer. Für jede Ziffer der zu sortierenden Zahlen wird ein sogenannter " | Radixsort sortiert die Elemente einer Liste, indem er sie nach einzelnen Ziffern (Stellenwerten) gruppiert, meistens beginnend mit der niederwertigsten Ziffer. Für jede Ziffer der zu sortierenden Zahlen wird ein sogenannter " | ||
- | |In der Animation kann man das Prinzip von Radix-Sort sehen. Zunächst werden die Elemente entsprechend ihrer Einerstelle in die Buckets sortiert und anschließend wieder in das ursprüngliche Array zurück übernommen, | + | |In der Animation kann man das Prinzip von Radix-Sort sehen.\\ Zunächst werden die Elemente entsprechend ihrer Einerstelle in die Buckets sortiert und anschließend wieder in das ursprüngliche Array zurück übernommen, |
<iframe src=" | <iframe src=" | ||
</ | </ | ||
Zeile 18: | Zeile 18: | ||
* Radixsort ist besonders effizient, wenn die Anzahl der Ziffern (bzw. die Schlüssellänge) im Vergleich zur Anzahl der Elemente klein ist | * Radixsort ist besonders effizient, wenn die Anzahl der Ziffern (bzw. die Schlüssellänge) im Vergleich zur Anzahl der Elemente klein ist | ||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) === | ||
+ | Überlege, welche Eigenschaften die Elemente einer Liste haben müssen, wenn man sie mit Radix-Sort sortieren möchte. Gib weitere Beispiele an, die Listen beinhalten die dich aus zahlen bestehen. | ||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | Implementiere Radix-Sort im Programmgerüst der entsprechenden Klasse in der Bluej-Vorlage von https:// | ||
+ | |||
+ | **A2.1** Betrachte zunächst den Konstruktor: | ||
+ | |||
+ | Kontrolliere deine Überlegung mit Hilfe entsprechender Eingaben, indem du das erzeugte Objekt untersuchst. | ||
+ | |||
+ | **A2.2** Als " | ||
+ | |||
+ | <code java> | ||
+ | // Buckets als Array aus ArrayLists erzeugen | ||
+ | ArrayList< | ||
+ | for(int i=0; i<10; i++) { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | **A2.3** Implementiere die beiden Abschnitte " | ||
+ | |||
+ | **A2.4** Wiederhole den Verteilen/ | ||
+ | |||
+ | Du musst dir noch überlegen, wie du der Reihe nach Einer-, Zehner, Hunderter-Stelle ermitteln kannst, um bei jedem neuen Durchlauf in die passenden Buckets zu sortieren. | ||
+ | |||
+ | Außerdem musst du festlegen, wie oft diese äußere Schleife durchlaufen werden soll - '' | ||
+ | |||
+ | |||
+ | ++++ Lösungsvorschlag | | ||
+ | <code java> | ||
+ | // Radixsort sortiert die ArrayList | ||
+ | public void sort(ArrayList< | ||
+ | |||
+ | // Unsortiertes Array ausgeben | ||
+ | System.out.println(Arrays.toString(a.toArray())); | ||
+ | |||
+ | // Buckets als Array aus ArrayLists erzeugen | ||
+ | ArrayList< | ||
+ | for(int i=0; i<10; i++) { | ||
+ | bucket[i] = new ArrayList<> | ||
+ | } | ||
+ | |||
+ | for(int d=0 ; d< | ||
+ | int q=1; | ||
+ | for(int i=0; i<d; i++) { | ||
+ | q=q*10; | ||
+ | } | ||
+ | // Verteilen | ||
+ | for(int z=0; z< | ||
+ | int ziel_bucket = (a.get(z)/ | ||
+ | bucket[ziel_bucket].add(a.get(z)); | ||
+ | } | ||
+ | // Einsammeln | ||
+ | int pos = a.size()-1; | ||
+ | for(int b=9; b>=0; b--) { | ||
+ | while(!bucket[b].isEmpty()) { | ||
+ | a.set(pos, bucket[b].removeLast()); | ||
+ | pos--; | ||
+ | } | ||
+ | } | ||
+ | // Zwischen/ | ||
+ | System.out.println(Arrays.toString(a.toArray())); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | ++++ |