2014-12-03 95 views
1

我寫了下面的代碼來對一個字符串進行泡泡排序。它顯示垃圾值。泡泡排序字符數組

main() { 
    int n, j, k; 
    char a[20], temp; 
    // statements to scan the number of items (n) and the string a[n]. 

    for (j = 1; j < n; j++) { 
    for (k = 0; k < n - j; k++) { 
     if (a[k] >= a[k+1]) { 
     temp = a[k]; 
     a[k] = a[k+1]; 
     a[k+1] = a[k]; 
     } 
    } 
    } 
    printf("The sorted items are: %s",a); 
} 

可能是什麼問題?

+0

提示:什麼是n設置? – 2014-12-03 03:49:52

+1

顯示用於掃描項目數(n)和字符串a [n]的'//語句的代碼.' – 2014-12-03 03:50:17

回答

3

在一些舊的C編譯器,你不能比較字符。一個簡單的解決方案將是類型轉換。至於你的代碼,

main() 
{ 
int n,j,k; 
char a[20], temp; 
//statements to scan the number of items (n) and the string a[n]. 

for(j=1; j<n; j++) 
{ 
    for(k=0; k<n-j; k++) 
    { 
     if((int)a[k]>=(int)a[k+1]) 
     { 
      temp=a[k]; 
      a[k]=a[k+1]; 
      a[k+1]=temp; 
     } 
    } 
} 
printf("The sorted items are: %s",a); 
} 

請注意,通過類型轉換,您正在比較字符的ASCII值。

+1

類型轉換不能解決問題,正確使用'temp'。而且不用轉換爲int就可以比較ASCII值。 – 2014-12-03 05:12:05

3

你正確地做了一個temp-var來交換這兩個元素,但忘了用它!你想:

a[k+1] = temp;