2017-09-26 7 views
0

C 라이브러리 함수를 사용하지 않고 버블 정렬 char 2d 배열을 시도하고 있는데,이 코드는 있지만 컴파일하고 실행할 때 아무것도 정렬됩니다.버블 정렬 char 배열

문자열이 선언되었습니다. char Strings [25] [1000]; 스캐너가 입력 한 정보로 채워집니다.

char temp; 

    for(int i =1; i < NUM; i++){ 
    for(int j = 0; j < NUM; j++){ 
     if (Strings[i-1] > Strings[i]){ 
     temp = *Strings[i]; 
     *Strings[i] = *Strings[j]; 
     *Strings[j] = temp; 
     } 
    } 
    } 
+0

안녕하세요 @Anna Truelove, 오신 것을 환영합니다. 오류 메시지를 보내주십시오. –

+0

'Strings [i-1]':'i '가 0 일 때, 그것은'Strings [-1]'이되어 무단 접근을하게됩니다. 또한'Strings [index]'의 타입은 2D 배열 인 경우'char *'가 아니다. 그래서'Strings [i] = Strings [j];는 불가능합니다. – BLUEPIXY

+0

또한'Strings [i-1]'과'Strings [i]'는 서로 옆에 있지만'Strings [i]'와'Strings [j]'는 서로 옆에 있지 않습니다. '>'대신'strcmp'를 사용하여 문자열을 비교하십시오. – BLUEPIXY

답변

1

C과 같이 문자열을 비교할 수 없습니다. 그래서, 당신은 strcmp 기능을 시도 할 수 있습니다.

먼저 문자열 헤더 파일을 포함하십시오. 즉, #include <string.h>

char tmp[1000]; 
int i,j,flag; 
for(i = 0, flag=1; i < NUM && flag==1; i++){ 
    for (j = 0, flag=0; j < NUM-i-1; j++){ 
     if (strcmp(Strings[j],Strings[j+1]) > 0){ 
       strcpy(tmp,Strings[j]); 
       strcpy(Strings[j],Strings[j+1]); 
       strcpy(Strings[j+1],tmp); 
       flag=1; 
     } 
     } 
} 
for(i=0;i<NUM;i++){ 
     printf("%s\n",Strings[i]); 
} 

버블 정렬에서 플래그를 사용하면 시간 복잡성이 약간 개선됩니다.