Problem mit bubblesort



  • hi leuete ich hab ein kleines bubblesort programm geschrieben welches mir zahlen in einem feld zahlen sortieren soll

    leider bekomm ich wenn ichs ausführe am ende einen speicher zugriffs fehler

    /*
     * bubblesort.c
     * Author: Felix Hohwlegler
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <stddef.h>
    
    int main()
    {
    
      int anIntArraySize;
      int feldzahlen;
      int *Array;
      int i;
      int j;
      int k;
      int l;
      int tmp;
    
      /*Feldgroesse einlesen*/
    
      printf("Anzahl zu sortierender Werte eingeben: ");
      scanf("%d", &anIntArraySize);
    
      /*Neues Feld Anlegen*/
      Array = (int*) calloc (anIntArraySize, sizeof(int));
    
      /*Überprüfung auf leeres Feld*/
      if (Array == NULL)
       {
          free(Array);
          return 1;
       }
    
      /*Zahlen einlsesn*/
      printf("\n\n %d ganze Zahlen eingeben: ", anIntArraySize);
      for (i = 0; i < anIntArraySize; ++i) 
      {
        scanf("%d", &feldzahlen);
        Array[i] = feldzahlen;
      }
    
      /*Zahlen sortieren*/
      for (j = anIntArraySize; i > 1; i--)
      {
        /*groessten Wert nach hinten schieben*/
        for (k = 0; k < j - 1; ++k) 
        {
          if (Array[k] > Array[k + 1])
          {
    	/*Werte tauschen*/
    	tmp = Array[k + 1];
    	Array[k + 1] = Array[k];
    	Array[k] = tmp;
          }
        }
      }
    
      /*Ausgabe sortierte Reihenfolge */
    
      printf("Sortierte Zahlenfolge: ");
    
      for (l = 0; l < anIntArraySize; ++i)
      {
        printf("%d ", Array[i]);
      }
    
      return 0;
    
    }
    

  • Mod

    for (j = anIntArraySize; i > 1; i--)
    

    Das kommt mir komisch vor

    Und dies hier auch:

    for (l = 0; l < anIntArraySize; ++i)
      {
        printf("%d ", Array[i]);
      }
    

    edit2: Nach Korrektur dieser beiden Sachen sollte es stimmen.



  • oh mist okay .... das sollte natürlich nicht passieren

    aber ein problem hab ich noch

    wenn ich das programm ausführe sagt es mir ich soll eingeben wie groß das feld sein soll, dann geb ich 5 ein

    dann sagt es mir ich solle 5 zahlen eingeben

    dann geb ich 12345 ein

    als ergebnis bekomme ich dann:

    135145 135145 135145 135145 135145

    das passt so doch nicht wirklich odeR?

    eigentlich sollte es mir ja dann 12345 wieder ausgeben odeR?



  • hans-sonny schrieb:

    dann sagt es mir ich solle 5 zahlen eingeben

    dann geb ich 12345 ein

    Wieso gibst du denn nur eine Zahl ein, wenn das Programm 5 erwartet?

    Ansonsten solltest du mal einen Debugger verwenden und mitverfolgen, was in der Schleife tatsächlich passiert.

    PS: Die Speicherverwaltung solltest du auch mal genauer betrachten - am Ende des Programms bleibt dein Array liegen (ist noch harmlos, weil unmittelbar danach das Betriebssystem den Speicher beschlagnahmt) und in der Fehlerbehandlung ist der free()-Aufruf zumindest sinnlos.



  • ja ne ich hab sie einzeln eingegeben und mit enter bestätigt ...

    ich habs prbiert mit 1 enter 2 enter 3 enter 4 enter 5 enter

    und mit 1 2 3 4 5 enter

    ....

    bei bneidem kommt das selbe raus

    ja soll ich den speicher am ende freiräumen?



  • Wie genau hast du denn die erste for()-Schleife berichtigt, auf die SeppJ hingewiesen hat? Und hast du auch daran gedacht, daß sich die innere Schleife auf den Zähler der äußeren bezieht).

    hans-sonny schrieb:

    ja soll ich den speicher am ende freiräumen?

    Das wäre angebracht.



  • okay danke für den hinweis^^ jetzt läuft es^^


Anmelden zum Antworten