在這段代碼是如何工作的(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。
我的問題是如何獲得我已經通過的數字?例如,如果我從不回到那個下標來測試,我將如何得到五個,例如,向上移動。
我不認爲我正在跟蹤程序,我被混淆與遞歸。爲了這個原因,請假定交換正確完成。
謝謝。
SE