2017-12-17 17 views
0

저는 C++을 가르치고 있습니다. 사용자가 입력 한 int 값을 가진 배열을 다른 함수로 전달하여 배열을 정렬하고 콘솔에 전달하는 방법을 배우고 있습니다. 나는 배열 자체를 전달하는 것을 테스트했다. 그러나 작동한다. 그러나 하나의 숫자가 어떻게 중복되는지에 따라 정렬은 어딘가에서 엉망이된다. 이것은 교환을위한 나의 코드입니다.어레이 스왑/정렬 배열 번호 복사

while(1){ 
     swapped = 0; 

     for(int i4 = 0; i4 < count; i4++){ 
      if(sdata[i4] > sdata[i4 + 1]){ 
       int temp = sdata[i4]; 
       sdata[i4] = sdata[i4 + 1]; 
       sdata[i4 + 1] = temp; 
       swapped = 1; 
      } 
     } 

     if(swapped == 0){ 
      break; 
     } 
    } 

이것은 실행시 반환되는 값입니다.

How many numbers? 5 
[1] Please enter a value: 5 
[2] Please enter a value: 3 
[3] Please enter a value: 1 
[4] Please enter a value: 2 
[5] Please enter a value: 4 
Original numbers: 5 3 1 2 4 
Swapped numbers: 1 2 3 3 4 

스왑 자체를 테스트하기 위해 새 파일에서 스왑을 다시 작성하려고했지만 어떤 이유로 작동하지 않습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

+5

count'가 액세스, sdata' '항목 수가있다'가정'SDATA [I4 + 1]'정의되지 않은 동작 결과 배열 범위 밖에 . – 1201ProgramAlarm

답변

0

당신이 할 수있는 것은 선택 정렬을 사용하는 것입니다. 요소에서 배열의 최대 및 최소 수를 서로 바꿉니다. 여기

코드이다

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