在这段代码中这是如何工作的(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);
}
}
}
我是从伯克利的一个 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。
我的问题是如何获得我已经通过的数字?例如,如果我从不回到那个下标进行测试,我将如何获得五个。
我认为我没有正确跟踪程序并且我对递归感到困惑。为此,请假设交换已正确完成。
谢谢你。
瑟