Hallo Michael,
ja, das ist klar; liste_List ist in der Moduleversion die input-Variable, die Sie nicht überschreiben
können;
der Fehler passiert gleich beim ersten Vertauschungsversuch, die liste muss auf eine Module-lokale Variable xL
kopiert werden
Remove[selectionSort]
selectionSort[liste_List] := Module[{xL = liste, L = Length[liste]},
Do[If[xL
[[i]] > xL[[j]], xL[[{i, j}]] = xL[[{j, i}]]], {i, L}, {j,
i + 1, L}];
xL
]
Gruss
Udo.
----Ursprüngliche
Nachricht----
Von: Michael.Gamer@XXXXXXX.de
Datum: 07.07.2012 10:54
An: <demug@XXXXXXX.ch>
Betreff: Selection Sort
in MMA Hilfe... geht nur für "kleine" Listen???
Hallo Forum,
ich habe da mal ein (sonderbares) Problem.
Für meine Studierenden habe ich ein Beispiel gemacht, um zu zeigen das BubbleSort die Komplexität O(n^2) hat. keine
große Sache, kein Problem. Jetzt das Gleiche mit SelectionSort. Der Einfachheit halber ist der Code ja schon in der MMA
Hilfe drin (illustriert die Do-Schleife) und da nehme ich natürlich den:
Do[If[list[[i]] > list[[j]], list[[{i, j}]] =
list[[{j, i}]]], {i,Length[list]}, {j, i + 1, Length[list]}]; list
Jetzt habe ich das in einen Modul gepackt:
selectionSort[liste_List] := Module[{},
Do[If[liste[[i]] > liste[[j]], liste[[{i, j}]] = liste[[{j, i}]]], {i,Length
[liste]}, {j, i + 1, Length[liste]}];
liste
]
und siehe da ich bekomme Fehlermeldungen, wenn die Liste eine
bestimmte Größe überschreitet. Meine Vermutung ist, daß das mit dem RETURN Wert der Do Anweisung zu tun hat, so ganz
verstehen kann ich das aber nicht. Hat da jemand eine Erklärung?
Ich habe mal das MMA-Notebook mitgeschickt.
Viele
Grüße
m.g.
Michael Gamer
Zur Römerbrücke 19
63456 Hanau
Telefon: 06181 663363
mobil: 0176 430 99707
Fax: 06181
663363
Mail: mg@XXXXXXX.de
home: www.michaelgamer.de