bubbleSort - ich kriegs einfach nicht hin



  • Hallo,

    ich soll für die Schule ein Programm schreiben, dass den quicksort und den bubblesort Algorhitmus verwendet, wodurch man vergleichen können soll, wie schnell jeder der beiden Algorhitmen arbeitet.

    Ich habe jetzt erst mal ein eigenes Prog für bubblesort geschrieben:

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <iostream.h>
    
    const int anzahl = 10;
    int anzahlArray [anzahl];
    int n,m;
    int a,b,c;
    
    void main (void)
    {
    cout << "unsortiert:\n";
    
    for (int n = 0; n <= anzahl-1; n = ++n)		// for Schleife fürs Hochzählen des Arrays
       {
       anzahlArray [n] = random(100 + 1);			// jedem Element wird eine Zufallszahl zugeordnet
       cout << anzahlArray [n] << " ";				// hier werden die unsortierten Werte ausgegeben
       }
    
    cout << "\n\nsortiert:\n";
    
    for(a = 0; a < anzahl - 1; a++)
    for(b = a + 1; b < anzahl; b++)
       {
          if(anzahlArray[a] > anzahlArray[b])
          {
             c = anzahlArray[a];
             anzahlArray[a] = anzahlArray[b];
             anzahlArray[b] = c;
          cout << anzahlArray [a]<< " ";
          }
       }
    
    getch();
    }
    

    Allerdings gibt mir das Programm irgendwie nur halbwegs sortierte Werte aus. Kann mir einer erklären, was ich falsch mache?? Danke

    P.S. Ich bin absoluter Anfänger in C

    [edit Shade]Code-Tags[/edit]



  • Schmeiß die Ausgabe aus den Sortierschleifen raus. Zuerst sortieren,
    danach ausgeben.



  • Hier ein kleines Programm zum Thema Zeitmessung. Den Rest findet Du bei google oder hier:

    // Zeitmessung
    
    #include <iostream>
    #include <ctime> // clock_t, clock(), ...
    #include <conio.h>
    #include <cmath>
    using namespace std;
    
    int main()
    {
      const int NMAX = 20;
      int max;
      cout << "Anzahl Schleifendurchlaeufe? ";
      cin >> max;
      clock_t t1,t2;
      double ts, tm=0;
    
      double a;
    
      cout << endl;
      for(int n=0; n<NMAX; ++n)
      {
          t1 = clock(); // Start
          for( int i=0; i<max;i++) 
          {
            a = sin(a); //zu messende Aktion 1
          } 
          t2 = clock(); // Ende
          ts = (t2-t1)/static_cast<float>(CLOCKS_PER_SEC); // Zeit in Sekunden.
          cout << "Zeit Aktion 1: " << ts << " sec" << endl;
          tm += ts; // Das ist das Gleiche wie tm = tm + ts       
      }
      tm/=NMAX; // Das ist das Gleiche wie tm = tm / NMAX
      cout << "Durchschnitts-Zeit bei Aktion 1: " << tm << " sec" << endl;
    
      tm=0;
      cout << endl;
      for(int n=0; n<NMAX; ++n)
      {
          t1 = clock();
          for( int i=0; i<max;i++) 
          {
            a = cos(a); //zu messende Aktion 2
          } 
          t2 = clock();
          ts = (t2-t1)/static_cast<float>(CLOCKS_PER_SEC);
          cout << "Zeit bei Aktion 2: " << ts << " sec" << endl;
          tm += ts;    
      }
      tm/=NMAX;
      cout << "Durchschnitts-Zeit bei Aktion 2: " << tm << " sec" << endl;
    
      getch();
    }
    

    Sortieren:
    z.B.:
    quicksort: http://sattas.homeunix.net/zeugs/quicksort.pdf
    bubblesort: http://www.volkard.de/vcppkold/bubble_sort.html



  • Wenn ich aber die Ausgabe aus der Schleife rausnehme, dann wird nur der erste Wert ausgegeben, der im Array steht. Oder seh ich da was falsch ??

    Und bei dieser Zeitmessung weiß ich nicht so recht, was ich damit anfangen soll...

    Was hab ich denn nun in meinem Code falsch gemacht? Könnt ihr mir mal die Zeilen und die Korrekturen sagen??

    Danke



  • Spendier mal der Ausgabe ne eigene Schleife. Du gibst Daten während der Sortierung aus, da
    ist das ganze Verfahren im fluss. Gib das Array aus, wenn es fertig sortiert ist.


Anmelden zum Antworten