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; }
-
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^^