2016-10-24 2 views
-1

일부 숫자와 숫자의 양을 감안할 때 오름차순으로 정렬 한 다음 패스 및 스왑의 수를 출력해야합니다. 왜 작동하지 않는거야? 또한이 문제에 벡터를 사용하고 싶습니다. 벡터를 함수에 전달하고 올바르게 호출하고 있습니까?버블 정렬이 작동하지 않는 이유는 무엇입니까

//bubble Sort 
#include<iostream> 
#include<vector> 
using std::cin; 
using std::cout; 

bool isSorted(std::vector<int> & myData); 

int main() 
{ 
    std::vector<int> myData; 
    int length = 0; 
    int pass = 0; 
    int swap = 0; 

    cin >> length; 


    int x = 0; 

    for(x; x < length; x++) 
    { 
     int input = 0; 
     cin >> input; 
     myData.push_back(input); 
    } 

    x = 1; 

    while(!isSorted(myData)) 
    { 
     int trash = 0; 
     for(x; x < length; x++) 
     { 
      if(myData[x] < myData[x-1]) 
      { 
       trash = myData[x]; 
       myData[x] = myData[x-1]; 
       myData[x-1] = trash; 

       swap++; 

      } 


     } 
     pass++; 

    } 

    cout << pass << " " << swap; 

    return 0; 
} 

bool isSorted(std::vector<int> & myData) 
{ 

    for(int i = 1; i < myData.size(); i++) 
    { 
     if(myData[i] < myData[i-1]) 
     { 
      return false; 
     } 
    } 
    return true; 
} 
+3

? 원하는 결과물을 출력 할 수 있습니까? –

+1

'for (x; x <길이; x ++)'데이터를 한 번 생각한 다음 처음에는'x'를 다시 설정하지 마십시오 (색인 생성을 위해서가 아니라 0부터 시작해야합니다)'for (x = 0, x infixed

+0

내가 할당을 제출해야하는 환경에 내 코드를 복사 할 때 컴파일러가 아무 것도 출력하지 않습니다. 아무것도. 이제 생각해 보면, 거품 정렬이 작동하지 않더라도 패스와 스왑이 0으로 초기화되었으므로 여전히 2 개의 0을 제공해야합니다. 내 컴파일러가 작동하지 않기 때문에 환경을 사용해야 만합니다. 어떤 제안? – Redefender

답변

0

당신은 버블 정렬의 반복 사이에 x를 재설정하지 않습니다. 어떤 일이 일어날지는 외부 루프 x의 첫 번째 반복이 하나가되기 전에 발생합니다. 그런 다음 이 될 때까지 while 루프를 실행하고 바깥 루프의 다음 반복으로 이동하십시오. x은 결코 재설정되지 않으므로 여전히 length과 같으므로 두 번째 반복에서는 아무런 변화가 없으므로 아무런 작업을하지 않고 내부 루프가 즉시 중단됩니다. 외부 루프의 세 번째 반복으로 이동하면 아무 것도 다시 발생하지 않습니다. 특히 배열이 결코 정렬되지 않으므로 바깥 쪽 while 루프가 끊어지지 않고 프로그램이 끝나지 않으며 결코 인쇄되지 않습니다.

단지 다음과 같이 루프 내부에 x = 1를 이동, 그것을 해결하기 위해 : 그것에 대해 "작동하지 않는"무엇

... 
while(!isSorted(myData)) 
{ 
    x = 1; 
    int trash = 0; 
...