2016-02-08 157 views
-3

這段代碼有什麼問題? while循環部分不起作用。 if語句是不夠的,終止while循環C-插入排序

int main(void) { 

    int data[SIZE] = { 12,2,5,8,2,45,89,0,12,4 }; 

    int i, j, tmp; 

    for (i = 0; i < SIZE-1; i++) { 
     j = i + 1; 
     tmp = data[j]; 
     while (j > 0){ 
      if(data[j-1] > tmp){ 
       data[j] = data[j - 1]; 
       j--; 
      } 
     } 
     data[j] = tmp; 
    } 

    for (i = 0; i < SIZE; i++) 
     printf("%d, ", data[i]); 

return 0; 
} 
+0

您的調試工作在哪裏? –

+0

請一直顯示您的研究成果。請先閱讀[問]頁面。 –

+0

並學習如何在這裏使用標記。 – Olaf

回答

0

j--;是你if語句內。如果data[j-1] > tmpfalse您的循環將不會終止。除此之外,您的算法不會對數組進行排序。像這樣調整您的代碼:

int main (void) 
{ 
    int data[SIZE] = { 12,2,5,8,2,45,89,0,12,4 }; 

    int i, j, tmp; 

    for (i = 0 ; i < SIZE - 1; i++) 
    { 
     j = i+1; 
     while (j > 0 && data[j] < data[j-1]) 
     { 
      tmp  = data[j]; 
      data[j] = data[j-1]; 
      data[j-1] = tmp; 
      j--; 
     } 
    } 

    for (i = 0; i < SIZE; i++) { 
     printf("%d, ", data[i]); 
    } 
    return 0; 
} 
+0

謝謝。所以如果語句不足以終止while循環。 – Ezerk