11---
22name : Idee implementieren
3- index : 8
3+ index : 2
44---
55
66# Eine Idee implementieren
77
88Man hat einige Spiele absolviert und sich eine gute Strategie
99ausgedacht. Damit hat man zwar schon einen wichtigen Teil der Arbeit
1010geleistet, aber irgendwie muss dem
11- [ Computerspieler] ( software/client ) noch beigebracht werden, nach
11+ : t [ Computerspieler] { # player } noch beigebracht werden, nach
1212dieser Strategie zu spielen.
1313
1414Anhand einer kleinen Aufgabe soll gezeigt werden, wie man eine Idee
@@ -34,53 +34,87 @@ zunächst beschreiben, wie man als Mensch vorgehen würde.
3434
35353 . Die kleinste Karte ist jetzt an der richtigen Position.
3636
37- 4 . Führe die Schritte nochmal für den Reststapel (ohne die sortierten
37+ 4 . Führe die Schritte immer wieder für den Reststapel (ohne die sortierten
3838 Karten) aus.
3939
4040### Idee implementieren
4141
4242Nachdem man seine Idee formal niedergeschrieben hat, kann sie ganz
4343leicht in ein Programm überführt werden:
4444
45- /**
46- * Das Array a[] symbolisiert den Stapel der unsortierten Karten. Dabei steht
47- * eine Zahl immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
48- * dass es sich um eine kleinere Karte handelt.
49- *
50- * start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
51- */
52- public static void sortiere(int[] a, int start) {
53- //Position der kleinsten Karte
54- int pos = start;
55-
56- // Gehe Array durch und merke die Position der kleinsten Karte
57- for (int i = start+1; i < a.length; i++) {
58- // Wenn eine kleinere Karte gefunden wurde...
59- if (a[i] < a[pos]) {
60-
61- ... neue Position merken
62- pos = i;
63- }
64- }
65-
66- // kleinste Karte mit erster Karte des Reststapels tauschen
67- int temp = a[start]; // erste Karte merken
68- a[start] = a[pos]; // kleinste Karte nach vorne bringen
69- a[pos] = temp; // gemerkte Karte in die Mitte des Stapels schreiben
70-
71- // Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden
72- if (start < a.length) {
73- sortiere(a, start+1);
74- }
75- }
76-
77- - Gehe den Stapel durch und merke die Position, an der sich die
78- kleinste Karte befindet.
79-
80- - Tausche die Position der kleinsten Karte mit der untersten Karte im
81- Stapel.
82-
83- - Die kleinste Karte ist jetzt an der richtigen Position.
84-
85- - Führe die Schritte nochmal für den Reststapel (ohne die sortierten
86- Karten) aus.
45+ #### Java
46+
47+ ``` java
48+ /**
49+ * Das Array a[] symbolisiert den Stapel der unsortierten Karten. Dabei steht
50+ * eine Zahl immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
51+ * dass es sich um eine kleinere Karte handelt.
52+ *
53+ * start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
54+ */
55+ public static void sortiere(int [] a, int start) {
56+ // Position der kleinsten Karte
57+ int pos = start;
58+
59+ // Gehe Array durch und merke die Position der kleinsten Karte
60+ for (int i = start+ 1 ; i < a. length; i++ ) {
61+ // Wenn eine kleinere Karte gefunden wurde...
62+ if (a[i] < a[pos]) {
63+
64+ // ... neue Position merken
65+ pos = i;
66+ }
67+ }
68+
69+ // kleinste Karte mit erster Karte des Reststapels tauschen
70+ int temp = a[start]; // erste Karte merken
71+ a[start] = a[pos]; // kleinste Karte nach vorne bringen
72+ a[pos] = temp; // gemerkte Karte in die Mitte des Stapels schreiben
73+
74+ // Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden
75+ if (start < a. length) {
76+ sortiere(a, start+ 1 );
77+ }
78+ }
79+ ```
80+
81+ #### Python
82+
83+ ``` python
84+ # Die Liste a symbolisiert den Stapel der unsortieren Karten als Zahlen repräsentiert.
85+ # Dabei steht eine immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
86+ # dass es sich um eine kleinere Karte handelt.
87+ #
88+ # start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
89+ #
90+ # Beachte: in Python müssen Datentypen nicht explizit angegeben werden, es hilft aber
91+ # möglicherweise bei der Entwicklung
92+ def sortiere (a : list[int ], start : int ):
93+ # Position der kleinsten Karte
94+ pos = start
95+
96+ # Gehe die Liste durch und merke die Position der kleinsten Karte
97+ for i in range (start + 1 , len (a)):
98+ # Wenn eine kleinere Karte gefunden wurde...
99+ if a[i] < a[pos]:
100+
101+ # ... neue Position merken
102+ pos = i;
103+
104+ # kleinste Karte mit erster Karte des Reststapels tauschen
105+ temp = a[start]; # erste Karte merken
106+ a[start] = a[pos]; # kleinste Karte nach vorne zum sortierten Bereich bringen
107+ a[pos] = temp; # gemerkte Karte in die Mitte des Stapels schreiben
108+
109+ # Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden,
110+ # ansonsten gebe die sortierte Liste zurück
111+ if start < len (a) - 1 :
112+ return sortiere(a, start+ 1 );
113+ else :
114+ return a
115+ ```
116+
117+ ## Weiterführende Links
118+
119+ Wir haben hier den Sortieralgorithmus [ Selection Sort] ( https://de.wikipedia.org/wiki/Selectionsort )
120+ rekursiv implementiert.
0 commit comments