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]; } }
学习是最好的投资!
삽입 정렬, 위 교환은 중간 변수를 사용하지 않지만 a=a+b가 오버플로를 일으킬 수 있다는 문제도 있습니다. 중간 변수가 없는 또 다른 방법은 XOR을 사용하는 것입니다: a=a. ^b,b=a^b,a=a^b 이 방법은 부동 소수점 숫자에는 적합하지 않습니다. 즉, 추가 공간 없이 데이터를 교환하는 데 사용됩니다. . . 초점은 여전히 알고리즘 자체에 있습니다. .
중첩 루프는 삽입 정렬로 작성되지만 내부 루프 본문은 삽입 정렬과 다릅니다.
삽입 정렬, 루프의 두 번째 수준은 array[j-1]>array[j]인 경우 array[j]와 array[j-1]의 값을 교환하는 것입니다
삽입정렬
이 코드는 교환을 의미하며 중간 변수가 필요하지 않습니다
삽입 정렬. 2단계 루프 내부는 값 교환을 의미합니다.
삽입 정렬, 두 번째 수준 루프의 코드는 약간 지저분해 보일 수 있지만 단순화하면 다음과 같습니다.
a = a + b;b = a – b;
a = a – b;*은 a와 b의 값을 교환한다는 뜻입니다. 이해가 안 되면 특정 숫자를 대입해서 보면 됩니다.
삽입 정렬, 위 교환은 중간 변수를 사용하지 않지만 a=a+b가 오버플로를 일으킬 수 있다는 문제도 있습니다. 중간 변수가 없는 또 다른 방법은 XOR을 사용하는 것입니다: a=a. ^b,b=a^b,a=a^b 이 방법은 부동 소수점 숫자에는 적합하지 않습니다. 즉, 추가 공간 없이 데이터를 교환하는 데 사용됩니다. . . 초점은 여전히 알고리즘 자체에 있습니다. .
중첩 루프는 삽입 정렬로 작성되지만 내부 루프 본문은 삽입 정렬과 다릅니다.
삽입 정렬, 루프의 두 번째 수준은 array[j-1]>array[j]인 경우 array[j]와 array[j-1]의 값을 교환하는 것입니다
삽입정렬
으아아아이 코드는 교환을 의미하며 중간 변수가 필요하지 않습니다
삽입 정렬. 2단계 루프 내부는 값 교환을 의미합니다.
삽입 정렬, 두 번째 수준 루프의 코드는 약간 지저분해 보일 수 있지만 단순화하면 다음과 같습니다.
a = a – b;
*은 a와 b의 값을 교환한다는 뜻입니다. 이해가 안 되면 특정 숫자를 대입해서 보면 됩니다.