2017-02-10 1 views
0

Ok, also versuche ich Bubble-Sort zu implementieren, aber es funktioniert nicht richtig, wenn ich Nullen als eine Zahl eintippe. Es zeigt zusätzliche Zahlen an.Warum druckt meine Bubble-Sort-Implementierung zusätzliche Zahlen?

int main() 
{ 
    int amount; 
    int numbers[50]; 
    int x, y, z, j; 
    int swap; 

    printf("How many numbers do you want to sort: "); 
    scanf("%i", &amount); 

    for (x = 0; x <= amount; x++) 
    { 
     printf("Enter number %i: ", x); 
     scanf("%i", &numbers[x]); 
    } 

    for (j = 0; j <= amount; j++) 
    { 
     for (y = 0; y <= amount; y++) 
     { 
      if (numbers[y] > numbers[y + 1]) 
      { 
       swap = numbers[y]; 
       numbers[y] = numbers[y + 1]; 
       numbers[y + 1] = swap; 
      }  
     } 
    } 


    for (z = 0; z <= amount; z++) { 
     printf("%i ", numbers[z]); 
    } 
    return 0; 
} 
+1

'für (x = 0; x <= Menge; x ++)' - Ich bin schon misstrauisch, weil normale Schleife in C die Form 'für (x = 0; x selbie

+1

' y <= Menge' -> 'y BLUEPIXY

+0

Sie können sich auf diese Antwort beziehen http://stackoverflow.com/questions/42043489/bubblesorting-c-language/42048752#42048752 –

Antwort

5

Wenn Sie Ihre for-Schleifen mit 0 beginnen, x = 0; x <= amount; erhalten Sie eine zusätzliche Schleife geben.

dh:

amount = 5, 
loop: 0, 1, 2, 3, 4, 5 (total 6 times) 

Versuchen x = 0; x < amount; statt

amount = 5 
loop: 0, 1, 2, 3, 4 (total 5 times) 

Und noch etwas, müssen Sie überprüfen, wo Ihre y in der Schleife ist später:

numbers[y + 1] = swap; 

als [y+1] wird außerhalb der Grenzen Fehler verursachen, wenn es die la ist St Iteration der Schleife. Denken Sie daran, Arrays beginnen wir normalerweise von 0 zu zählen, und das letzte Element ist daher size-1.

Wenn Sie Schleife von y = 0; y < amount; Sie erhalten:

numbers[0], numbers[1], numbers[2]. numbers[3], numbers[4], total 5 elements 

So Ihre letzte Schleife mit numbers[y + 1] werden versuchen, tatsächlich zu Zugriffszahlen [5], ein theoretisches sechstes Element, das nicht existiert. Schlage vor, diese Schleife auf y < amount-1

Verwandte Themen