2017-02-10 26 views
0

好的,所以即時嘗試實現冒泡排序,但它不能正常工作時,我輸入0作爲一個數字。它顯示額外的數字。爲什麼我的氣泡排序實現打印額外的數字?

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

'for(x = 0; x <= amount; x ++)' - 我已經懷疑了,因爲C中的正常循環形式爲for(x = 0; x < ; x ++)'你看到'<='這個問題了嗎? ' – selbie

+1

回答'y <= amount' - >回答'y BLUEPIXY

+0

你可以參考此答案http://stackoverflow.com/questions/42043489/bubblesorting-c-language/42048752#42048752 –

回答

5

如果你用0開始for循環,x = 0; x <= amount;會給你一個額外的循環。

即:

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

嘗試x = 0; x < amount;代替

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

還有一件事,你需要檢查您的y是在循環以後:

numbers[y + 1] = swap; 

爲當它是la時,[y+1]將導致出界錯誤循環的重複。請記住,我們通常從0開始計數的數組,因此最後一個元素是size-1

如果從y = 0; y < amount;循環,你會得到:

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

所以你用numbers[y + 1]最後一個循環將實際嘗試接入號碼[5],不存在理論上的第六元素。建議將該循環設置爲y < amount-1