C++: Bubblesort für ein int-array gibt Fehler aus

Hallo,

ich habe ein Programm geschrieben, welches insgesamt 5 Zahlen einliest und diese in ein Integer-Array speichert.
Anschließend soll es diese mit Hilfe von Bubblesort sortieren.
Funktioniert auch soweit - außer wenn sich ein Wert nicht ändert . . .
Allerdings komme ich einfach nicht drauf, wie ich es hinbekomme, dass er alles richtig ausgibt . . .
Beispiel:
Eingabe: 21345
Richtiges Ergebnis: 12345
Ausgabe des Programmes: 12000

Hier ist mal der Quellcode:

//--------------------------

#include
#include
#include
#pragma hdrstop

//--------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int Zahl[5];
int Erg[5];
int i, k;

cout > Zahl[0];
cout > Zahl[1];
cout > Zahl[2];
cout > Zahl[3];
cout > Zahl[4];

for (i = 0; i Zahl[k + 1])
{
int Save = Zahl[k];
Zahl[k] = Zahl[k + 1];
Zahl[k + 1] = Save;
Erg[k + 1] = Save;
Erg[k] = Zahl[k];
}
}
}

cout

Der Fehler liegt darin, dass du Erg nicht beschreibst, wenn Zahl[k] nicht größer als Zahl[k+1] ist.
Du kannst Erg einfach mit dem Eingangswert vorbelegen bevor die loops beginnen, oder du machst noch ein else zu deinem if in dem du Zahl[k] in Erg[k] übernimmst. Vergiss dann aber den letzten nicht…
Gruß

Ich lasse mal alles weg was nicht rein mit dem Problem Bubblesort zu tun hat.

Du sortierst dein Array „Zahl“ korrekt (sogar mehr als das, die 2. Schleife muesste nur bis 4-i laufen, also k die If-Abfrage wird niemals ausgefuehrt => „Erg[x]“ wird niemals irgendein Wert zugewiesen!?

Mein Rat: Lass „Erg“ entweder ganz weg und gib unten „Zahl“ aus, oder wenn du die urspruengliche Reihenfolge in „Zahl“ speichern willst dann kopiere vor dem Sortieren alles von „Zahl“ in „Erg“ rein und sortiere dann nur „Erg“.

MfG

Hallo Hell,

der Fehler liegt darin, dass dein Erg Array nur beschrieben wird, wenn Zahlen verändert werden, also nur bei den ersten beiden Zahlen in deinem Beispiel.

Du brauchst das Erg Array auch gar nicht, da das sortierte Ergebnis ja schon in Zahl vorhanden ist.

Gib also einfach das Array Zahl aus statt Erg:

cout

Hi,

probier’s mal mit

if (Zahl[k] >= Zahl[k + 1])

Beste Grüße

Hallo,

dein Problem liegt darin, dass dein Zweig

if (Zahl[k] > Zahl[k + 1])
{
int Save = Zahl[k];
Zahl[k] = Zahl[k + 1];
Zahl[k + 1] = Save;
Erg[k + 1] = Save;
Erg[k] = Zahl[k];
}

nur durchlaufen wird, wenn deine erste Zahl grösser ist als deine zweite Zahl. Da in deinem Fall die Zahlen 21345 eingegeben werden, wird nur die 2 mit der eins im Erg-array getauscht und in den restlichen steht eine vorinitialisierte 0, die auch nicht verändert wird

Grüsse