WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zufallszahlen der Größe nach sortieren und neu ablegen

 

Meister_brot
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2012, 23:01     Titel: Zufallszahlen der Größe nach sortieren und neu ablegen
  Antworten mit Zitat      
Guten Abend,

mein erster Post und gleich eine Frage! Tut mir leid, wenn ich euch damit auf die Nerven falle Laughing

Es geht sich um Folgendes:

erstmal vorne weg, ich habe von Matlab noch absolut KEINEN blassen Schimmer.

Zu meinem Problem:

Ich muss anhand von 2 unterschiedlichen Sortieralgorithmen 100 Zufallszahlen der Größe nach sortieren.

Als erste Variante habe ich den klassischen Bubblesort-Algorithmus gewählt, er ist zwar langsam und nicht sehr effizient, aber einfach in Matlab umzusetzen.

Die zweite Variante habe ich mir folgendermaßen vorgestellt:

Ich generiere wieder 100 Zufallszahlen mit "zahlen=rand(100,1)" und einen zweiten array "zahlen_sortiert=ones(100,1)"

Nun möchte ich die kleinste Zahl aus dem Array "zahlen" ermitteln und an die erste Stelle des Arrays "zahlen_sortiert" setzen. Danach wird die kleinste zahl des Arrays "zahlen" gelöscht.

Jetzt beginnt das Spiel wieder von vorne. Die kleinste Zahl aus "zahlen" heraussuchen, an zweite Stelle des Arrays "zahlen_sortiert" setzen und löschen, dann wieder die kleinste, an dritte Stelle setzen, löschen, usw usf.


Nun zu meinem Problem:
Ich habe absolut keinen Ansatz, wie ich dies in Matlab bewerkstelligen könnte. Um Hilfe und Anregungen wäre ich äußerst dankbar!


MfG,
Meister_brot
_________________

wer das liest kann lesen Wink
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.01.2012, 23:11     Titel:
  Antworten mit Zitat      
Hallo,

das Umsetzen in einen Algorithmus ist auch etwas, was geübt werden muss.

Ein paar Hinweise:
Du brauchst:
- eine Schleife (for oder while)
- den Befehl min mit zwei Rückgabeargumenten

Ansonsten ist es lediglich Indizierung.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Meister_brot
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2012, 23:26     Titel:
  Antworten mit Zitat      
so sieht mein code momentan aus. Ich steh total auf dem Schlauch! Ich WEIß, dass da ein Logikfehler ist, ich finde ihn aber nicht Sad

Code:
zahlen=rand(100,1)
n=length(zahlen)
zahlen_sortiert=ones(100,1)
j=1;

for i=1:1:n-1
    kleinste=min(zahlen);
    zahlen_sortiert(j)=kleinste;
    zahlen(kleinste) = [];
    j=j+1;
end
 



Ich verzweifel, hab schon ganz graue Haare dadurch! Evil or Very Mad
_________________

wer das liest kann lesen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.01.2012, 00:11     Titel:
  Antworten mit Zitat      
Hallo,

ja, das klappt erstmal nicht Wink Du brauchst eben den Index der kleinsten Zahl, und schon funktioniert es:

Code:
zahlen=rand(100,1);
s = sort(zahlen);

n=length(zahlen);
zahlen_sortiert=ones(100,1);
j=1;

for i=1:1:n
    [kleinste, index]=min(zahlen);
    zahlen_sortiert(j)=kleinste;
    zahlen(index) = [];
    j=j+1;
end

isequal(s, zahlen_sortiert)


Der schnellste Weg zum Sortieren ist natürlich der MATLAB-Befehl SORT, aber ich denke mal, hier ging es um die Programmierübung.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2012, 00:13     Titel:
  Antworten mit Zitat      
"kleinste" ist in diesen Fall kein gültiger Index. Möglich wäre z.B:
Code:
zahlen(zahlen==kleinste) = [];
jedoch nur, wenn in dem Vektor unterschiedliche Werte stehen. Daher empfiehlt sich wie bereits von Harald erwähnt der Befehl MIN mit zwei(!) Rückgabeargumenten.

EDIT: zu langsam....
Private Nachricht senden Benutzer-Profile anzeigen
 
Meister_brot
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2012, 00:31     Titel:
  Antworten mit Zitat      
versteh ich das nun richtig, dass bei
Code:
[kleinste, index]=min(zahlen);
das "index" die Stelle der Zahl ist?
Wenn beispielsweise die kleinste Zahl 0.023 beim ersten Durchlauf an 5. Stelle wäre, dann wäre [kleinste, index] = (0.023, 5) ?

Und dieser Teil
Code:
s = sort(zahlen);
in Kombination mit diesem Teil
Code:
isequal(s, zahlen_sortiert)
dient als Überprüfung, ob die durch sort durchgeführte Sortierung mit meiner Eigenen übereinstimmt, richtig?

Hey, wenn das alles so stimmt, wie ich mir das eben denke, dann ist das ja garnicht soooo kompliziert, wie ich dachte... Ich wusste nicht, dass es diesen Index der Zahl überhaupt gibt.

Vielen vielen Dank für die schnelle Hilfe! Sollte ich in Zukunft wiedermal auf für mich unlösbare Probleme stoßen, dann weiß ich ja, wo ich Hilfe bekomme Very Happy

ps: Ja, die Sache dient als Programmierübung. Ich habe schon überlegt den sort-befehl irgendwo versteckt einzubauen und dann nur 100x wirre Sachen machen zu lassen, da ich echt nicht weiter gekommen bin Embarassed

MfG,
Meister_brot
_________________

wer das liest kann lesen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.01.2012, 10:09     Titel:
  Antworten mit Zitat      
Hallo,

du hast alles richtig verstanden.

Was den MIN-Befehl (und andere MATLAB-Befehle) angeht, ist es immer hilfreich, die Dokumentation zu lesen. Dort wird nämlich das Verhalten des Befehls, auch bei verschiedenen Aufrufvarianten, detailliert beschrieben, z.B.
Code:

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.