2015-06-16 40 views
1
#include <stdio.h> 

int main(void) { 

    int a[5]={1,2,0,5,4},i,j,c; 
    for(i=0;i<5;i++)  
    { 
     for(j=0;j<5-i;j++){ 
      if(a[j]>a[j+1]) 
      { 
       c=a[j]; 
       a[j]=a[j+1]; 
       a[j+1]=c; 
      } 
     } 
    } 
    for(i=0;i<5;i++) 
    { 
    printf("%d",a[i]); 
    } 
    return 0; 
} 

ideone說 「時間超過限制時間:5記憶:2048信號:24」冒泡排序ideone期限超過

,但它工作正常,在渦輪編譯

+0

想想這一點:一旦內環已在或索引之前完成了所有的元素'i'應該進行排序。這意味着你的內循環應該從'i + 1'到最後一個元素('j <5'),並且你應該交換元素'i'和'j'。 –

回答

6
for(j=0;j<5-i;j++){ 
      if(a[j]>a[j+1]) 

a[j+1]是陣列出的綁定訪問將導致未定義的行爲

1

嘗試此冒泡排序..機器週期不會在任何編譯器中受到阻礙..

for (i = 0; i < count -1; i++) 
     for (j = 0; j < ((count - 1) - i); j++) { 
      if (memptr[j]>memptr[j+1]) { 
       temp = memptr[j]; 
       memptr[j] = memptr[j + 1]; 
       memptr[j + 1] = temp; 
      } 
     } 
0
int a[5]={1,2,0,5,4} 

因此,以下指標,你會得到以下內容:

index ->| 0 | 1 | 2 | 3 | 4 | 
content ->| 1 | 2 | 0 | 5 | 4 | 

現在在你的外環for(i=0;i<5;i++),對於第一次迭代i = 0,則內環破條件會,

for(j=0;j<5-i;j++) 

,或者

for(j=0;j<5-0;j++) 

因此j的值將0增加到4

現在想想會發生什麼a[j+1],當時j = 4

您試圖訪問,a[4+1]a[5]其中陣列aindex定義多達4

所以在a[5],你會得到Undefined behavior

嘗試:

for(j=0; j<5 -i -1; j++)