DMUG-Archiv 2012

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Selection Sort in MMA Hilfe... geht nur für "kleine" Listen???

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/>










Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html