Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Quicksort funktioniert nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.11.2003, 20:36 Uhr
~Progi
Gast


Ich habe hier Quicksort und Bubblesort in einem Quellcode. Warum funktioniert Quicksort nicht. Was habe ich falsch gemacht?


C++:
#include <stdio.h>  
#include <stdlib.h>
#define MAX 50

int a[MAX];
int rand_seed=10;

/* gibt Zufallszahlen zwischen 0 und 32767 zurück*/  
int rand()  
{
    rand_seed = rand_seed * 1103515245 +12345;    
    return (unsigned int)(rand_seed / 65536) % 32768;  
}

main()  
{    
    int i,t,x,y,wahl;
    char weiter[5];
    
    do                                                                                
    {
    system("cls");                                                                    
    printf("\n\t\t Sortierverfahren");                                  
    printf("\n\t\t~~~~~~~~~~~~~~~~~~");
    printf("\n\nWelches Sortierverfahren moechten Sie waehlen? ");
    printf("\n\nMoechten Sie Bubble-Sort verwenden, druecken Sie die 1!");
    printf("\nMoechten Sie Quick-Sort verwenden, druecken Sie die 2!");
    printf("\n\nBitte waehlen!");
    printf("\n\n");
    scanf("%i",&wahl);
    
    /* füllt das Feld. Am Anfang ist i=0, danach wird getestet, ob i kleiner als die maximale
       Zahl die ausgegeben werden soll, ist. Ist dies der Fall, so wird i um eins höher gezählt.*/
    
    for (i=0; i < MAX; i=i+1)    
    {      
        a[i]=rand();      
        printf("%d\n",a[i]);    
    }
    
    if(wahl==1)
    {    
    /* sortieren der Felder. Ist x kleiner als die maximale Zahl-1, so wird x um eins erhöht.*/    
       for (x=0; x < MAX-1; x=x+1)      
          for (y=0; y < MAX-x-1; y=y+1)        
          if (a[y] > a[y+1])        
          {  
             t=a[y];  
             a[y]=a[y+1];  
             a[y+1]=t;        
          }
   /* gibt sortierte Felder solange aus, bis der Maximalwert, der ausgegeben werden sollte,
   erreicht ist.*/
    
   printf("\n\nHier sind die Zahlen in sortierter Reihenfolge!\n");
   printf("\n\n");  
   for (i=0; i < MAX; i=i+1)      
   printf("%d\n",a[i]);
   }

   if(wahl==2)
   {
      int feld[10];
      int n;

      int quicksort(int low, int high)
      {
      int h;
      int i=low;
      int j=high;
      int x=feld[(low+high)/2];


   do
   {
   while(feld[i]<x)i=i+1;
   while(feld[j]>x)j=j-1;
      if(i<=j)
      {
      h=feld[i];
      feld[i]=feld[j];
      feld[j]=h;
      i=i+1;j=j-1;
      }
   }while(i<=j);

   if(low<j) quicksort(low,j);
   if(i<high)quicksort(i,high);

}


   int main(int argc,char *argv[])
   {
   // Zufallsgenerator initialisieren
   srand((unsigned) time(NULL));

   // Felder mit Zufallszahlen belegen
      for(n=0;n<=100;n++)
      feld[n]=1+rand()%100;

      printf("\nHier stehen die unsortierten Zahlen!");
      printf("\n\n");

         // Ausgabe der unsortierten Zahlen
         for(n=0;n<=100;n++)
         printf("%d ",feld[n]);

         // Sortieren
         quicksort(0,100);
         printf("\n");
         printf("\nHier stehen die sortierten Zahlen!");
         printf("\n\n");
         // Ausgabe der sortierten Zahlen
            for(n=0;n<=100;n++)
            printf("%d ",feld[n]);
            scanf("%i",&n);
    }
    }


    
   printf("\n\n\nMoechten Sie fortfahren? ja/nein ");                              
   scanf("%s",weiter);                                              
   }
   while (weiter[0]=='j' || weiter[0]=='J');

}



Bearbeitung von Pablo:

[ cpp ] tags gesetzt. Bitte nächstes Mal dran denken


Dieser Post wurde am 25.11.2003 um 21:41 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.11.2003, 21:42 Uhr
Pablo
Supertux
(Operator)


Und was soll nicht funktionieren? Kannst du nicht kompilieren, funktioniert das nicht wie du es dir wünscht???? Du erwartest doch nicht von uns, dass wie die Arbeit eines Compilers übernehmen, oder?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.11.2003, 21:51 Uhr
virtual
Sexiest Bit alive
(Operator)


Du hast zweimal main in Deinem Programm, kann nicht tun.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.11.2003, 21:54 Uhr
Pablo
Supertux
(Operator)


und weiter ist nicht in int main() deklariert!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.11.2003, 21:58 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ist doch latte ob es nur main oder int main ist.
hopsa der compiler frist es. Der will das ja nicht verkaufen sondern nur testen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.11.2003, 22:47 Uhr
~Progi
Gast


Das genaue Problem ist, dass er alles, was ab Wahl==2 steht, nicht erkennt und somit auch nicht ausgibt. Das Bubblesort funktioniert ohne Probleme, nur das Quicksort ignoriert das Programm.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.11.2003, 08:07 Uhr
Tommix



'Morgen,
Du musst die Funktion quicksort aus main rausnehmen, lokale Funktionen gibt es in C nicht!

C++:
   if(wahl==2)
   {
      int feld[10];
      int n;

      int quicksort(int low, int high)  // << Geht nicht !!!
      {
      int h;



Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.11.2003, 08:25 Uhr
(un)wissender
Niveauwart


Richtig, außerdem kompiliere erstmal fehlerfrei, dann kannst du auch sehen ob was nicht läuft.
Man kann auch mehrere mains haben, aber nicht mit der gleichen Signatur.
Also lass es lieber.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: