Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
q1:java-sortierverfahren [2017/07/11 08:37] – angelegt admin03 | q1:java-sortierverfahren [2017/07/11 08:43] (aktuell) – admin03 | ||
---|---|---|---|
Zeile 9: | Zeile 9: | ||
Prinzip: Das kleinste Element im unsortierten Teil des Feldes wird mit dem 1. Element des unsortierten Teils getauscht. Danach ist der unsortierte Teil um 1 Element kleiner geworden. Deshalb auch die Bezeichnung „Minsort“. | Prinzip: Das kleinste Element im unsortierten Teil des Feldes wird mit dem 1. Element des unsortierten Teils getauscht. Danach ist der unsortierte Teil um 1 Element kleiner geworden. Deshalb auch die Bezeichnung „Minsort“. | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Das Verfahren wird nun auf das unsortierte Restfeld angewendet, bis das Feld schließlich vollständig sortiert ist. | ||
+ | |||
+ | Alle Sortierverfahren kann man sich hervorragend mit dem Programm " | ||
+ | |||
+ | 2. Sortieren durch direktes Austauschen (BUBBLESORT) | ||
+ | |||
+ | Diesem Sortierverfahren liegt das Bild der aufsteigenden Luftblasen zugrunde. Es sortiert in der Weise, dass die Zahlen, beginnend mit der kleinsten, der Reihe nach nach " | ||
+ | Prinzip: Je zwei benachbarte Elemente des unsortierten | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | **Verbesserung: | ||
+ | |||
+ | Um die Sortierverfahren in Java zu implementieren, | ||
+ | Der soll im nächsten Kapitel erläutert werden. | ||
+ | |||
+ | ====== Realisierung der beiden Sortierverfahren ====== | ||
+ | |||
+ | |||
+ | Bubblesort und Minsort sollen nun als Java-Programme realisiert werden. Dabei wird ein Feld Sortfeld geschaffen und eine globale Variable aktugroesse, | ||
+ | |||
+ | bubblesort und minsort sollen Methoden im Programm sein. Weitere Methoden sind fuellezufaellig, | ||
+ | |||
+ | <code JAVA> | ||
+ | | ||
+ | private long[] werte = new long[FELDGROESSE] ; | ||
+ | private int aktuGroesse ; | ||
+ | private int zahlenGroesse ; | ||
+ | public void fuelleZufaellig () | ||
+ | { | ||
+ | for (int i=0; i<= aktuGroesse-1; | ||
+ | werte[i] = (long)(Math.random()*zahlenGroesse) ; | ||
+ | } | ||
+ | public void gibAus() | ||
+ | { | ||
+ | for (int i=0; i<= aktuGroesse-1 ;i++) | ||
+ | jTextArea1.append(String.valueOf(werte[i]) + " | ||
+ | } | ||
+ | public void tausche(int i, int j) | ||
+ | { | ||
+ | long temp = werte[i] ; | ||
+ | werte[i] = werte[j] ; | ||
+ | werte[j] = temp ; | ||
+ | } | ||
+ | public void bubblesort() | ||
+ | { | ||
+ | for (int durchlauf = 1 ; durchlauf < aktuGroesse ; durchlauf++) | ||
+ | { | ||
+ | int sortiertBeginn = aktuGroesse ; | ||
+ | for (int pos = 0 ; pos < sortiertBeginn-1 ; pos++) | ||
+ | { | ||
+ | if (werte[pos] > werte[pos+1]) | ||
+ | | ||
+ | } | ||
+ | sortiertBeginn-- ; | ||
+ | } | ||
+ | } | ||
+ | public void minsort() | ||
+ | { | ||
+ | int unsortiertBeginn = 0 ; | ||
+ | for (int durchlauf = 1 ; durchlauf < aktuGroesse ; durchlauf++) | ||
+ | { | ||
+ | int minpos = unsortiertBeginn ; | ||
+ | long minimum = werte[unsortiertBeginn] ; | ||
+ | for (int pos = unsortiertBeginn ; pos < aktuGroesse ; pos++) | ||
+ | { | ||
+ | if (werte[pos] < minimum) | ||
+ | { | ||
+ | minpos = pos ; | ||
+ | minimum = werte[pos] ; | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public void jButton1_ActionPerformed(ActionEvent evt) | ||
+ | { | ||
+ | jTextArea1.setText("" | ||
+ | jTextArea1.setLineWrap(true) ; | ||
+ | aktuGroesse = Integer.parseInt(jTextField1.getText()) ; | ||
+ | zahlenGroesse = Integer.parseInt(jTextField3.getText()) ; | ||
+ | fuelleZufaellig() ; | ||
+ | if (jRadioButton1.isSelected()) | ||
+ | { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | jButton2.setVisible(true) ; | ||
+ | jButton3.setVisible(true) ; | ||
+ | jButton4.setVisible(true) ; | ||
+ | } | ||
+ | |||
+ | public void jButton2_ActionPerformed(ActionEvent evt) | ||
+ | { | ||
+ | long startTime = System.currentTimeMillis(); | ||
+ | minsort() ; | ||
+ | long timeNow = System.currentTimeMillis(); | ||
+ | double diff = (timeNow-startTime)/ | ||
+ | jTextField2.setText(Double.toString(diff)) ; | ||
+ | if (jRadioButton1.isSelected()) | ||
+ | | ||
+ | } | ||
+ | |||
+ | public void jButton3_ActionPerformed(ActionEvent evt) | ||
+ | { | ||
+ | |||
+ | long startTime = System.currentTimeMillis(); | ||
+ | bubblesort() ; | ||
+ | long timeNow = System.currentTimeMillis(); | ||
+ | double diff = (timeNow-startTime)/ | ||
+ | jTextField2.setText(Double.toString(diff)) ; | ||
+ | if (jRadioButton1.isSelected()) | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | ====== Aufgaben ====== | ||
+ | |||
+ | - Nummerierter ListenpunktTeste das oben angegebene Java-Programm! | ||
+ | - Wähle zufällig ein unsortiertes Feld mit 5 Elementen und führe die beiden Methoden bubblesort() und minsort() konkret und schrittweise durch. Notiere für alle vorkommenden Variablen ihre Werte im Laufe der Zeit und ergänze den Quelltext durch sinnvolle Kommentare! Welche Aufgaben haben die Variablen sortiertBeginn und unsortiertBeginn? | ||
+ | - Betrachte Minsort und überlege Dir, wie viele Vergleiche zum Sortieren eines Feldes mit n Elementen maximal durchgeführt werden müssen! | ||
+ | - Informiere Dich über das Verfahren InsertSort und baue es in das Sortierprogramm ein | ||
+ | |||
+ | |||
+ | **Ergänzung zu Aufgabe 3:** | ||
+ | |||
+ | Die einfachen Sortierverfahren Bubblesort und Minsort besitzen zwei geschachtelte Schleifen. Die äußere wird ca. n mal durchlaufen (genauer gesagt n-1). Dabei ist n die Anzahl der zu sortierenden Elemente. Die innere Schleife wird zwischen 1 mal und n mal durchlaufen, | ||
+ | |||
+ | Es gilt aber ziemlich genau folgendes: Die Anzahl der Operationen wächst mit , also quadratisch. Benötigt ein Programm 25 Sekunden für 10.000 Elemente, dann wird es für 20.000 Elemente schon | ||
+ | |||
+ | In der Praxis werden für große zu sortierende Felder schnellere Verfahren eingesetzt, deren Laufzeit langsamer als quadratisch mit n wächst. Das schnellste bekannte Verfahren ist das vom Engländer Charles Antony Richard Hoare 1962 erfundene Quicksort, mit dem wir uns im nächsten Kapitel beschäftigen werden. | ||
+ | |||