Hallo Herr Gamer,
entweder:
selectionSort[li_List] := Module[{liste = li},
Do[If[liste[[i]] > liste[[j]],
liste[[{i, j}]] = liste[[{j, i}]]], {i, Length[liste]}, {j, i + 1,
Length[liste]}];
liste
]
oder
SetAttributes[selectionSort, HoldFirst];
selectionSort[liste_] := Module[{},
Do[If[liste[[i]] > liste[[j]],
liste[[{i, j}]] = liste[[{j, i}]]], {i, Length[liste]}, {j, i + 1,
Length[liste]}];
liste
]
oder (deutlich schneller)
selectionSort =
Compile[{{li, _Integer, 1}},
Module[{liste}, liste = li;
Do[If[liste[[i]] > liste[[j]],
liste[[{i, j}]] = liste[[{j, i}]]], {i, Length[liste]}, {j,
i + 1, Length[liste]}];
liste]]
Am 07.07.2012 10:54, schrieb Gamer Michael:
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 <mailto:mg@XXXXXXX.de>
home: www.michaelgamer.de <http://www.michaelgamer.de/>