В этом коде, как это работает (Java):Необходимая помощь вставки понимание рода
/** 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);
}
}
}
Я получил это от Berkeley CS класса я иду через интернет, обучение себя. это не домашнее задание (я бы хотел, но не так повезло). я не понимаю следующее:
Предположим, что числа в A [] равны 8, 2, 10, 5, 4, 12. Когда я использую их выше, я получаю это в своих итерациях, отслеживая его.
- самый верхний индекс является U, или в этот случай 12, U-1 = 4, не подкачки не сделано
- U теперь 4 (рекурсивный U-1), а число выше, это 5 (другой U-1). они меняются местами.
- U теперь 4, потому что четыре просто поднялись и 10 U-1, они поменялись местами.
Моя последовательность в настоящее время 8,2,4,10,5,12.
Мой вопрос в том, как получить цифры, которые я уже прошел? как я получу пять, например, чтобы подняться вверх, если я никогда не вернусь к этому индексу для тестирования.
Я не думаю, что правильно отслеживаю программу, и меня путают с рекурсией. Для этого, пожалуйста, предположите, что обмен сделан правильно.
спасибо.
себе