在分區分區的兩個while循環中,爲什麼看起來索引i是否超出了數組的邊界並沒有被視爲一見鍾情?[這是來自Big Java的正確代碼,我已經測試過了,只是該指數的東西混淆了我]考慮到第一個元素作爲支點,爲什麼索引不會超出數組的邊界?
public void sort(int from, int to)
{
if (from >= to) return;
int p = partition(from, to);
sort(from, p);
sort(p + 1, to);
}
private int partition(int from, int to)
{
int pivot = a[from];
int i = from - 1;
int j = to + 1;
while (i < j)
{
i++; while (a[i] < pivot) i++;//here
j--; while (a[j] > pivot) j--;//here
if (i < j) swap(i, j);
}
return j;
}
誰說我們不關心?用'from'或'to'調用'sort'超出限制,你會得到一個異常。我鼓勵你添加一個邊界驗證。 – Maroun
在放置'// here'的行中,嘗試添加邊界驗證以避免出現「越界異常」。如果'a [i]'永遠不是'或者'a [j]'永遠不是''pivot',那麼您將收到一個'越界異常'。 –
CrApHeR
這是正確的代碼,我已經複製並測試過 – xiasheng