2012-06-11 2 views
2

을 비교하지 내가 같은 배열을 가지고 :정수 비교 부정확하거나

:

int array[] = { 1,3,2,5,4,7,6,9,8,10 }; 

것은 내가하여 스왑을 트리거 경우 조건을 트리거하는 배열을 통해 단계 그들의 수 없음을 비교할하려고 할 때 내가 놓치고 정수를 비교하는 몇 가지 세부

for(int i=0; i<9; i++) 
{ 
    if (array[i] > array[i++]) 
    { 
    cout << "Swapping" << array[i] << " " << array[i++]<< endl; 
    int temp = 0; 
    temp = array[i]; 
    array[i] = array[i++]; 
    array[i++] = temp; 
    temp = 0; 
} 

}

있습니까? 그들이 배열되어 있기 때문에 그들은 다르게 취급됩니까?

+1

그냥 모든'내가'++ 대체 내가 + 1 '과 '그리고 그것은 작동해야합니다 –

+0

@FlorianSowade 물론, 그 자체를위한'i ++'를 제외하고. –

답변

4

i++는 "i을 반환하고 i = i + 1 설정"을 의미

은 또한 다음이 필요합니다. 따라서 i++을 사용할 때마다 i이 하나씩 증가하여 루프를 망가 뜨립니다. 대신 i+1을 사용하십시오.

+0

아! 권리. 잊어 버렸습니다. ++는 영구적 인 증분입니다. – Sion

3

i++은 사후 증가이며 이전 값을 반환합니다.

if (array[i] > array[i+1]) 

지금은 array[i]과 비교하고 있습니다.

temp = array[i]; 
array[i] = array[i+1]; 
array[i+1] = temp; 
+0

작성된 것처럼 코드에는 비교시 정의되지 않은 동작이 있습니다. 그가'array [i]'와 자신을 비교한다는 것은 절대 보장 할 수 없다. (사실, 명백한 세대는 그를'array [i + 1]

1

i를 너무 많이 늘리면됩니다.

경우 (배열 [I]> 배열 [I + 1])

과 하나에서 마찬가지로 떨어져 다른 모든 단위를 해결 당신의 루프 : 당신의 문에 경우 변경 .

0

는 다음과 같은 코드를 사용한다 : -

for(int i=0; i<9; i++) 
{ 
    if (array[i] > array[i+1]) 
    { 
    cout << "Swapping" << array[i] << " " << array[i+1]<< endl; 
    int temp = 0; 
    temp = array[i]; 
    array[i] = array[i+1]; 
    array[i+1] = temp; 
    temp = 0; 
    } 
} 

문 : if (array[i] > array[i++])이 이해가되지 않습니다 if (array[i] > array[i])에 해당합니다.

1

표현식 :

array[i] < array[i++] 

array[i] = array[i++] 

은 정의되지 않은 동작, 그래서 아무것도 발생할 수 있습니다. (다른 사람이 밖으로 지적했듯이, 당신이 어쨌든 싶지 않은 것을 아마. 작성, 당신은 이 i 5 번 루프를 통과 할 때마다 증가입니다.)