Computerhilfen.de Logo
Forum
Tipps
News

C Bubble-Sort-Algorithmus



include <stdio.h>

#define SIZE 8

void main()
{
   char *names[] =
   {
      "Micky",
      "Minnie",
      "Donald",
      "Daisy",
      "Goofy",
      "Tick",
      "Trick",
      "Track"
   };
   char  *temp;
   int x, a, b;

   for(a = 0; a < SIZE - 1;a++)
   for(b = a + 1; b < SIZE; b++)
   {
      if(*names[a] > *names)
      {
         temp = names[a];
         names[a] = names;
         names = temp;
      }
   }

   for (x = 0; x < SIZE; x++)
      printf("%s\n", names
  • );

}

Hallo Leute, ich habe mal eine Frage zu diesem Programmbeispiel aus meinem Buch!Es ist die erste von drei Fassungen zum sortieren von Strings!Mir ist der Ablauf des Programmes halbwegs klar, aber ich verstehe einfach nicht die Arbeitsweise der beiden Schleifen!

Warum SIZE-1 und b = a+1???

Es wäre wirklich gut wenn mir jemand hier mal erklären könnte warum die beiden Schleifen so formuliert sein müssen, denn es sind 8 Strings und nicht SIZE-1 = 7?

Schon mal vielen Dank im voraus!

Antworten zu C Bubble-Sort-Algorithmus:

Kann zwar kein c aber arrays fangen immer bei 0 an und nicht bei 1

Also ist
names[ 0 ]="Micky"
names[1]="Minnie"
names[2]="Donald"
usw..

size-1= 7 also erste schleife names[ 0 ] bis names[7] sind 8 stück
und

b=a+1 weil er in der ersten schleife das erste nimmt names[ 0 ] und mit dem nächsten vergleicht (a=0: b=a+1 = b=0+1 = b=1) also mit names[1]

Sonst würde er beim ersten Durchlauf Minnie mit Donald vergleichen und Micky garnicht sortieren.

Gruß

« Letzte Ă„nderung: 15.08.03, 16:26:10 von Nighty »

Vielen Dank für die Hilfe habe schon an die Nummerierung gedacht, die mit 0 bei den Arrays startet, konnte aber leider mit der zweiten Schleife nichts anfangen.Danke für die gute Erklärung!In meinem Buch wird alles Einfache oft erklärt, so was leider nicht.Ist kein schlechtes Buch nur an manchen Stellen lässt es halt Fragen offen.

Nachdem ich nun alles mir angeguckt habe, ist die Schleife irgendwie komisch.Denn ob dort nun Size - 1 oder Size steht ist doch eh egal, denn wenn das Array von 0 - 7 geht, und die Schleife bis 8 inkrementiert wird, dann ist das doch sowieso unwichtig also kann man auch in beiden Schleifen < SIZE oder SIZE - 1 schreiben.Warum die Schleifen so formuliert worden sind, ist mir dann ein Rätsel.Es gibt dort dann eigentlich keinen Unterschied oder?Sorry das ich so frage, aber ich bin ein wenig verwundert.Thx nochmal oder schonmal für die Antwort!

Auf das kleiner hab ich garned geachtet erst, aber der Code stimmt schon, der muss so bleiben.

Die erste Schleife darf nur bis names[6] gehen sonst bekämst beim letzten durchlauf nen Fehler bei der zweiten schleife.

Wenn a=7 wäre beim letzten Durchlauf( a<size = a<8 ):
( b=a+1 = b=7+1 = b=8 )

Fehler bei:
if(*names[7] > *names[8])

Und names[8] gibts nicht, also muss die Bedingung a < size-1 sein.

Gruß

Ich hab lang nicht mehr unter C was gemacht, aber wäre es optimaler die konstante SIZE lieber zu ersetzen und die Arraygröße mit sizeof herzubekommen?

MfG KIKO

mit sizeof() kriegste nur die grösse in bytes an und ned die arraygrösse
jedoch könntest du z.b:
int var = sizeof(einArray) / sizeof(int);
so die anzahl speicherbare elemente in einem array rausfinden ;D


« Probleme bei 3d ProgrammierungSpiel ohne Engine »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!