2014-12-03 3 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은 무엇으로 설정 되나요? –

+1

아이템 수 (n)와 문자열 a [n]을 스캔하는 문장을 보여줍니다. –

답변

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 값을 비교합니다. –

3

두 요소를 서로 바꾸기 위해 temp-var를 올바르게 만들었지 만 사용하는 것을 잊었습니다! 원하는 :