|
|
Sortier-Algorithmus inkorrekt? |
|
major95 |

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 17.05.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.06.2014, 19:03
Titel: Sortier-Algorithmus inkorrekt?
|
 |
Hallo user!
Ich muss einen Sortier-Algorithmus schreiben (bin ein Anfänger) aber meiner ist fehlerhaft. Er soll eine Spalte einer 10x4-Matrix durchllaufen und diese Spalte von klein nach groß sortieren. Mein Ansatz war eine forschleife und eine whileschleife, aber es funktioniert nicht. Der größte Wert der spalte soll gesucht und mit dem letzten wert der spalte umgetauscht werden. beim nächsten durchgang soll der letzte wert weggelassen werden usw. Kann mir bitte jemand weiterhelfen? danke!
Hier ist der Code:
|
|
|
|
|
markuman |

Forum-Guru
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 03.06.2014, 20:53
Titel: Re: Sortier-Algorithmus inkorrekt?
|
 |
|
 |
|
major95 hat Folgendes geschrieben: |
Hallo user!
Ich muss einen Sortier-Algorithmus schreiben (bin ein Anfänger) aber meiner ist fehlerhaft. Er soll eine Spalte einer 10x4-Matrix durchllaufen und diese Spalte von klein nach groß sortieren. Mein Ansatz war eine forschleife und eine whileschleife, aber es funktioniert nicht. Der größte Wert der spalte soll gesucht und mit dem letzten wert der spalte umgetauscht werden. beim nächsten durchgang soll der letzte wert weggelassen werden usw. Kann mir bitte jemand weiterhelfen? danke!
Hier ist der Code:
|
Vorab "...aber ist fehlerhaft" ist keine Fehlermeldung Du musst schon sagen was genau nicht funktioniert oder was passiert oder was nicht passiert etc.
Afaiu:
1. Deine while Schleife soll von i <= z laufen (kleiner gleich, nicht größer gleich)! Sonst startet deine While-Schleife mit deiner Anfangskondition (z=10, i=1) nicht: 1 >= 10
2. In deiner vorvor und vorletzte Zeilen in der For-Schleife sind die indizes hardcodiert. hilf=A(z,3) und A(z,3)=A(zeile,3). Andernfalls würdest du immer nur den letzten Wert (10) deiner Matrix irgendwo hin tauschen.
3. Als letztes in der For-Schleife musst du dein i wieder auf 1 resetten, sonst läuft deine While-Schleife in der nächsten For-Runde nicht mehr an.
Wenn dann alles funktioniert, könntest du dir auch noch quicksort anschauen. https://de.wikipedia.org/wiki/Quicksort
Ein relativ einfach zum implementierender und schneller Sortier-Algorithmus.
_________________
DIY OR DIE
entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
|
|
|
major95 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 17.05.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.06.2014, 21:23
Titel: Re: Sortier-Algorithmus inkorrekt?
|
 |
|
 |
|
markuman hat Folgendes geschrieben: |
major95 hat Folgendes geschrieben: |
Hallo user!
Ich muss einen Sortier-Algorithmus schreiben (bin ein Anfänger) aber meiner ist fehlerhaft. Er soll eine Spalte einer 10x4-Matrix durchllaufen und diese Spalte von klein nach groß sortieren. Mein Ansatz war eine forschleife und eine whileschleife, aber es funktioniert nicht. Der größte Wert der spalte soll gesucht und mit dem letzten wert der spalte umgetauscht werden. beim nächsten durchgang soll der letzte wert weggelassen werden usw. Kann mir bitte jemand weiterhelfen? danke!
Hier ist der Code:
|
Vorab "...aber ist fehlerhaft" ist keine Fehlermeldung Du musst schon sagen was genau nicht funktioniert oder was passiert oder was nicht passiert etc.
Afaiu:
1. Deine while Schleife soll von i <= z laufen (kleiner gleich, nicht größer gleich)! Sonst startet deine While-Schleife mit deiner Anfangskondition (z=10, i=1) nicht: 1 >= 10
2. In deiner vorvor und vorletzte Zeilen in der For-Schleife sind die indizes hardcodiert. hilf=A(z,3) und A(z,3)=A(zeile,3). Andernfalls würdest du immer nur den letzten Wert (10) deiner Matrix irgendwo hin tauschen.
3. Als letztes in der For-Schleife musst du dein i wieder auf 1 resetten, sonst läuft deine While-Schleife in der nächsten For-Runde nicht mehr an.
Wenn dann alles funktioniert, könntest du dir auch noch quicksort anschauen. https://de.wikipedia.org/wiki/Quicksort
Ein relativ einfach zum implementierender und schneller Sortier-Algorithmus. |
Also erstmal danke für die hilfe!
Ich hab das umgeändert was du gesagt hast, aber es funktioniert trotzdem nicht. Es gibt keine Fehlermeldung, aber die Spalte der Matrix verändert sich kein bisschen. Diese fixen indizes sind so gewollt, denn es soll der letzte Wert (zeile 10) der Spalte 3 mit der größten Zahl (groesst) umgetauscht werden. Ich hab meinen Code so umgeändert:
Wie gesagt, ändert sich an der Matrix A garnichts. Ich komm nicht darauf wieso sich nicht mal die zahlen etwas ändern..
|
|
|
markuman |

Forum-Guru
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 03.06.2014, 22:46
Titel: Re: Sortier-Algorithmus inkorrekt?
|
 |
|
 |
|
major95 hat Folgendes geschrieben: |
Also erstmal danke für die hilfe!
Ich hab das umgeändert was du gesagt hast, aber es funktioniert trotzdem nicht. Es gibt keine Fehlermeldung, aber die Spalte der Matrix verändert sich kein bisschen. Diese fixen indizes sind so gewollt, denn es soll der letzte Wert (zeile 10) der Spalte 3 mit der größten Zahl (groesst) umgetauscht werden.
|
Ja, das wird ja auch gemacht, in der ersten For-Schleife für z=10. Im nächsten Durchgang z=9 steht ja der größte Wert bereits in der letzten Zeile und du willst den zweitgrößten Wert in die vorletzte Zeile schreiben. Änderst du den index 10 nicht, wird der zweitgrößte Wert in die letzte Zeile geschrieben.
Ok, sind noch ein paar weitere Schnitzer und Logikfehler...Für z=10:1 muss die Schrittweite von -1 angeben werden, weil for sonst hochzählt und dann war es das. Von 10:1 käme als nächstes 11, aber 1 wurde damit schon lange erreicht.
Die größte (temporäre) Zahl ermittel ich direkt als erstes innerhalb der Schleifen - immer der letzte Wert. Kann auch der erste sein. Ist sowas von egal, da du ja eh alle noch folgenden Zahlen mit dieser Zahl vergleichst.
Dann habe ich die zweite Schleife auch in eine For-Schleife umgewandelt (ist übersichtlicher und greifbarer). Außerdem muss die if-Abfrage größer gleich sein, sonst kann es sein, dass bei einem Schleifendurchgang kein neuer großer Wert aus dem Mittelfeld gefunden wird und ans Ende verschoben wird. Für die gefundene große Zahl speicher ich auch direkt den Index Wert, das darf auch nicht nach der inneren Schleife passieren, weil sonst tauscht du Zeile 8 mit 8 z.b.
_________________
DIY OR DIE
entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|