int[] array = { 4, 7, 1, 5, 2, 6 };
for (int i = 0; i < array.length; i++)
{
for (int j = i; j > 0 && array[j - 1] > array[j]; j--)
{
array[j] = array[j - 1] + array[j];
array[j - 1] = array[j] - array[j - 1];
array[j] = array[j] - array[j - 1];
}
}
黄舟2017-04-17 17:29:35
삽입 정렬, 위 교환은 중간 변수를 사용하지 않지만 a=a+b가 오버플로를 일으킬 수 있다는 문제도 있습니다. 중간 변수가 없는 또 다른 방법은 XOR을 사용하는 것입니다: a=a. ^b,b=a^b,a=a^b 이 방법은 부동 소수점 숫자에는 적합하지 않습니다. 즉, 추가 공간 없이 데이터를 교환하는 데 사용됩니다. . . 초점은 여전히 알고리즘 자체에 있습니다. .
大家讲道理2017-04-17 17:29:35
삽입 정렬, 루프의 두 번째 수준은 array[j-1]>array[j]인 경우 array[j]와 array[j-1]의 값을 교환하는 것입니다
ringa_lee2017-04-17 17:29:35
삽입 정렬, 두 번째 수준 루프의 코드는 약간 지저분해 보일 수 있지만 단순화하면 다음과 같습니다.
a = a + b;
b = a – b;
a = a – b;
*은 a와 b의 값을 교환한다는 뜻입니다. 이해가 안 되면 특정 숫자를 대입해서 보면 됩니다.