이 작품 (자바)를 수행하는 방법이 코드는 :필요한 도움 이해 삽입 종류
/** Move A[A.length-1] to the first position, k, in A such that there
* are no smaller elements after it, moving all elements
* A[k .. A.length-2] over to A[k+1 .. A.length-1]. */
static void moveOver (int A[]) {
moveOver (A, A.length-1);
}
/** Move A[U] to the first position, k<=U, in A such that there
* are no smaller elements after it, moving all elements
* A[k .. U-1] over to A[k+1 .. U]. */
static void moveOver (int A[], int U) {
if (U > 0) {
if (A[U-1] > A[U]) {
/* Swap A[U], A[U-1] */
moveOver (A, U-1);
}
}
}
나는 나 자신을 가르치고, 온라인을 통해 갈거야 버클리 CS 클래스에서이 있어요. 그것은 숙제가 아니다 (나는 바란다. 그러나 그것은 운이 좋다). 내가 이해할 수없는 것은 다음과 같다.
A []의 숫자가 8, 2, 10, 5, 4, 12라고 가정 해 보자. 위의 내용을 사용할 때, 나는 이것을 반복하면서 추적한다.
- 상부 가장 첨자는이 케이스 (12), U-1, 더 스왑 는 가
- U 이제 4 (재귀 U-1) 및 수는 그것이 이상 수행되지 4 U, 또는에 5 (다른 U-1). 그들은 교환된다.
- 4 명이 방금 올라 갔고 10 명이 교체 되었기 때문에 U는 4입니다.
내 시퀀스는 이제 8,2,4,10,5,12입니다.
내 질문은 내가 이미 통과 한 번호를 얻는 방법입니다. 테스트를 위해 위 첨자로 돌아 가지 않으면 어떻게 올라갈 수 있습니까?
나는 프로그램을 올바르게 추적하고 있고 재귀와 혼동을 느끼고 있다고 생각지 않는다. 이를 위해 스왑이 올바르게 수행되었다고 가정하십시오.
감사합니다.
자체 귀하의 추적에 관해서는