2014-07-25 5 views
-1

Dev-C++를 사용합니다. 정렬 기능을 사용할 때마다 프로그램이 중단됩니다.정렬 - 버블/선택

#include<iostream> 
#include<string.h> 
using namespace std; 
void bsort(char * items,int length) 
{ 
    bool ex = true; 
    for(int a = 0;a < length;a++) 
    { 
      cout<<"Exchange"; 
     if(ex == false) break; 
     ex = false; 
     for(int b = 0;b >= (length-1);b++) 
     { 

      if(items[b] < items[b+1]) 
      { 
        ex = true; 
        items[b] ^= items[b+1]; 
        items[b+1] ^= items[b]; 
        items[b] ^= items[b+1];  

      }     
     }   
    }   
    cout<<items; 
} 
void sort(char * items,int count) 
{ 
    register int a,b; 
    register char t; 

    for(a = 1;a < count;++a) 
    { 
      for(b = count-1; b >= a;--b) 
      { 
       if(items[b-1] > items[b]) 
       { 
        cout<<"Exchange"; 
        t = items[b-1]; 
        items[b-1] = items[b]; 
        items[b] = t;    
       }  
      }  
    }  
} 
void xselect(char * items,int count) 
{ 
      char c = items[0]; 
      for(int a = 1;a < count;a++) 
      { 
       if(c > items[a])   
       { 
        c ^= items[a]; 
        items[a] ^= c; 
        c ^= items[a];  
       } 
      } 
      cout<<items; 
} 
int main() 
{ 
    char * p = "I am awesome"; 
    xselect(p,strlen(p)); 
    cout<<p; 
    return cin.get(); 
} 

어떤 문제가 있습니까?

char * p = "I am awesome"; 

:

편집 : 당신이 당신의 기능에

+0

나는 당신의 중첩 루프에서 조건이 잘못 생각합니다. – 0x499602D2

+1

왜 'register' 변수를 사용하고 있습니까? – 0x499602D2

+1

왜 xor를 스와핑에 사용합니까? 대부분의 경우 그것은 관용적 인 임시 변수를 사용하는 것보다 느리고, 어쨌든 더 모호합니다. – MatthiasB

답변

1

무효 bsort : 당신이 무슨 짓을했는지 => (INT B = 0; B> = (길이 1), B ++)에 대한

당신이 (INT B = 0 => 짓 할 필요; B < 길이; b ++)

무효 정렬 : 그것은 내 PC에서 잘 작동합니다.

무효 xselect : void xselect(string items,int count){ for(int i=0;i<count-1;i++) { char c = items[i]; for(int a = i+1;a < count;a++) { if(c > items[a])
{ cout<<c<<items[a]<<endl; c ^= items[a]; items[a] ^= c; c ^= items[a]; items[i]=c; cout<<c<<items[a]<<endl; } } } cout<<items; }

+0

나는 어떤 차이가 볼 수 없다 : | – Yashas

+0

내 잘못 :(처음에 잘못 쓰겠습니다. – oknsnl

4

"... App.exe가 작동이 중지되었습니다"내가 얻는 algorithim 잘못 될 수 있지만 어떤 프로그램이 충돌을 일으키는 여기서 "나는 굉장하다"는 const char *입니다. 정렬하는 동안 당신은 그것을 돌연변이하려고 노력하고 있습니다. 이것은 정의되지 않은 행동을 알고있는 한입니다.

대신 char * first를 할당하고 원하는 문자열로 채 웁니다.

또는 C++로 작업하고 있으므로 더 나은 문자열 처리를 담당하는 std :: string을 사용해보십시오.

Ps : 나중에 코드의 어떤 섹션이 관련되어 있는지 확인하고 링크 대신 해당 스 니펫을 게시하십시오. 더욱이, 충돌시 (예 : 줄 번호)에 대한 자세한 정보는 자신과 다른 사람들이 문제를 찾는 데 도움이 될 수 있습니다.

+0

또한 Stratege에서 언급 한 문제로 인해 포인터 대신 배열을 사용할 수 있습니다. char p [] = "나는 굉장하다"; – Deniz

+0

오, 그래, 그것을 발견하지 : P 고마워 – Yashas