straight insertion sort
-
hi all,
mich als absoluten anfänger überfordert folgendes problem:
wenn ich das die variable "Anzahl" grösser als 4 ist, dann stürzt das programm ab. Wenn ich das programm also ausführe und 5 oder mehr zahlen einsortieren lassen will, dann gibt es einen absturz
need help#include <iostream.h> void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; }; void Einsortieren(int *array, int *size, int *zuSortieren, int *Anzahl) { for (int Nummer=*Anzahl-1;Nummer!=-1;--Nummer) { *size=*size+1; int i=*size-1; array[i] = zuSortieren[Nummer]; bool Austausch=true; while (Austausch==true) { Austausch = false; if (array[i] < array[i-1]) { swap (&array[i], &array[i-1]); Austausch = true; --i; }; }; }; }; void main() { int size = 10; int *array = new int[size]; int i; for (i=0;i!=100*size;i+=100) //Array erstellen { array[i/100] = i; }; cout<<"Wir haben folgendes Array: \n"; for (i=0;i!=size;++i) //Array ausgeben { cout<<array[i]<<", "; }; int Anzahl; cout<<"\nWie viele Zahlen wollen Sie einsortieren? \n"; cin>>Anzahl; int *zuSortieren = new int[Anzahl]; cout<<"Welche Zahlen moechten Sie sortieren? \n"; for (i=0;i!=Anzahl;++i) //Nach Zahlen fragen { cin>>zuSortieren[i]; }; Einsortieren(array, &size, zuSortieren, &Anzahl); cout<<"Einsortiert: \n"; for (i=0;i!=size;++i) //Array ausgeben { cout<<array[i]<<", "; }; };
-
Benutzt einen Debugger.
Bye, TGGC (Pipe my World.)
-
In der Funktion Einsortieren schreibst du
*size=*size+1; int i=*size-1; array[i] = zuSortieren[Nummer];
Damit greifst du schon im ersten Durchlauf auf array[10] zu. array wird aber vom Hauptprogramm übergeben, und ist da ein array der Länge 10, reicht also nur bis array[9]. Dass das mit bis zu vier Zahlen funktioniert, ist reiner Zufall.
-
-
Ähhh...er hat recht damit. Ein Debugger ist ne verdammt gute Idee...
-
Geld zu mir.
Bye, TGGC (Pipe my World.)
-
Danke erstmal.
Wenn ich wüsste wie man mit einem debugger umgeht... wie gesagt, ich hab erst vor 3 tagen angefangen mich mit c++ zu beschäftigen (und dem programmieren überhaupt) und kämpf mich im moment nur durch jede menge tutorials..nochmal zu meinem problem:
aber ich vergrössere das array doch vorher um eins? wenn ich cout<<array[10] in die funktion schreibe, dann klappt das doch auchwie wäre es denn richtig? ist dazu viel zu ändern?
wo kann ich schnell lernen, mit einem debugger umzugehen?
-
RTFM & STFW.
Bye, TGGC (Pipe my World.)
-
Nein, die Größe des Arrays veränderst du nicht. Hm. Ich denke, der einfachste Weg, den Code noch ans Laufen zu kriegen, dürfte sein, die Reihenfolge der Initialisierungen der Arrays umzudrehen. Wenn du die Benutzereingabe schon hast, weißt du, wieviel Platz du für das Hauptarray brauchst. Also:
int main() // main ist _immer_ int { int Anzahl; cout<<"\nWie viele Zahlen wollen Sie einsortieren? \n"; cin>>Anzahl; int size = 10; int *array = new int[size + Anzahl]; // Genug Platz für alle int i; for (i=0;i!=100*size;i+=100) //Array erstellen { array[i/100] = i; }; int *zuSortieren = new int[Anzahl]; cout<<"Welche Zahlen moechten Sie sortieren? \n"; for (i=0;i!=Anzahl;++i) //Nach Zahlen fragen { cin>>zuSortieren[i]; }; Einsortieren(array, &size, zuSortieren, &Anzahl); cout<<"Einsortiert: \n"; for (i=0;i!=size;++i) //Array ausgeben { cout<<array[i]<<", "; }; // Speicher wieder freigeben delete[] array; delete[] zuSortieren; }