Selection Sort Algorithmus

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Selection Sort Algorithmus

Beitrag von schlafmütze » Sa Sep 19, 2009 11:11 am

Code: Alles auswählen

void Numsort (double v[], int len)
{
  for( int i = 0;  i  <  len -1;  i++)
   {
      int mini = i;

     for( int j = i + 1;  j < len; j++)
         if( v[j] < v[mini] )
          mini = j;

    double temp = v[i];
                 v[i] = v[mini];
                 v[mini] = temp;

    }   /* For schließen*/
    
} /*Funktion schließen*/
Ich versuche gerade das selection Sort Algorithmus zu verstehen.

Code: Alles auswählen

for( int i = 0;  i  <  len -1;  i++)
   {
      int mini = i;
Hier sucht er nach den kleinsten Element und gibt es an mini weiter.

Code: Alles auswählen

for( int j = i + 1;  j < len; j++)
         if( v[j] < v[mini] )
          mini = j;
Hier wird i um eins erhöht und j weitergegeben folgend wird j im inkrementiert und muss nicht größer als len sein.
Jetzt wird j mit mini verglichen wenn j größer ist wird der Wert von j nach mini verschoben und somit ist mini um ein Element gewachsen.

Code: Alles auswählen

 double temp = v[i];
                 v[i] = v[mini];
                 v[mini] = temp;
Hier weiß ich nicht wozu tauschen der Elemente gut ist.
Ich habe mir das C Tutorial angeguckt allerdings ist das nichts von Selection Sort Algorithmus zu finden allerdings nur von Bubble und Quick Sortieralgorithmen
Korrigiert mich bitte was ich falsches verstanden habe und danke im voraus. :)

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Selection Sort Algorithmus

Beitrag von Kerli » Sa Sep 19, 2009 11:48 am

schlafmütze hat geschrieben:

Code: Alles auswählen

 double temp = v[i];
                 v[i] = v[mini];
                 v[mini] = temp;
Hier weiß ich nicht wozu tauschen der Elemente gut ist.
Du hast ja an der Stelle 'mini' den kleinsten, unsortierten Wert. Deshalb musst du den auch an die aktuelle Stelle 'i' schreiben. Falls zufälligerweise eh an der Stelle 'i' der kleinste Wert ist passiert nichts, da dann i == mini.
schlafmütze hat geschrieben:Ich habe mir das C Tutorial angeguckt allerdings ist das nichts von Selection Sort Algorithmus zu finden allerdings nur von Bubble und Quick Sortieralgorithmen
Ich hab zumindest einmal die Überschrift hinzugefügt. Vielleicht komm ich heute oder morgen noch dazu etwas zu schreiben :) Ansonsten ist auch der Artikel auf Wikipedia ganz gut...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Selection Sort Algorithmus

Beitrag von nufan » Sa Sep 19, 2009 12:15 pm

Bei Selectsort musst du zwischen sortiertem und unsortiertem Bereich unterscheiden. Der sortierte Bereich hat einen Index < i, der unsoertierte >= i. Am Anfang gilt der Array als komplett unsortiert.
schlafmütze hat geschrieben:

Code: Alles auswählen

for( int i = 0;  i  <  len -1;  i++)
Du gehst den ganzen Array exklusive das letzte Element durch. Wenn du nur noch ein einziges unsortiertes hast ist es nämlich automatisch das letzte bzw. höchstwertige.
schlafmütze hat geschrieben:

Code: Alles auswählen

int mini = i;
i ist der Index des ersten unsortierten Elements. mini ist der Index des kleinsten im Durchlauf gefunden Wertes. Am Beginn sagst du einfach das erste unsortierte Element ist das Minimum.
schlafmütze hat geschrieben:

Code: Alles auswählen

     for( int j = i + 1;  j < len; j++)
         if( v[j] < v[mini] )
           mini = j;
Jetzt gehst du durch den Rest des Arrays und suchst das Minimum. Findest du etwas kleineres als den Wert mit dem Index mini, wird es zum Minimum (Index wird mini zugewiesen).
schlafmütze hat geschrieben:

Code: Alles auswählen

    double temp = v[i];
                 v[i] = v[mini];
                 v[mini] = temp;
Du vertauschst das erste unsortierte Element mit dem Minimum. Dadurch bekommst du eine aufsteigende Ordnung.
Beim nächsten Schleifendurchlauf gehört das eben vertauschte Element mit dem Index mini bereits zum sortierten Bereich. i wird erhöht und das ganze Spiel geht von vorne los.

Hier hab ich übrigens eine Seite mit guten Animationen zu verschiedenen Algorithmen gefunden:
http://www.cs.oswego.edu/~mohammad/clas ... rt2-E.html
Geh das mal langsam durch oder zeichne dir so etwas in der Art auf und geh den Code in Gedanken durch, das hilft oft.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Selection Sort Algorithmus

Beitrag von Kerli » So Sep 20, 2009 11:02 am

schlafmütze hat geschrieben:Ich habe mir das C Tutorial angeguckt allerdings ist das nichts von Selection Sort Algorithmus zu finden [...]
Jetzt schon :P

http://www.proggen.org/doku.php?id=c:selectionsort

Ist zwar noch nicht ganz fertig, aber das meiste sollte schon dabei sein...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten