編輯:原來從迭代到遞歸的轉換是個麻煩。OP發現的實際問題在第二個遞歸select調用的參數中。 This line: return select(numbers, left, pivotIndex + 1, i); should be return select(numbers, pivotIndex + 1, right, i); 我將在下面留下最初的答案,因為我不想顯得比實際聰明。 我認為您可能誤解了select方法的偽代碼—它使用迭代而不是遞歸。 以下是您當前的實現: private static int select(int[] numbers, int left, int right, int i) { if(left == right) { return left; } int pivotIndex = pivot(numbers, left, right); pivotIndex = partition(numbers, left, right, pivotIndex, i); if(i == pivotIndex) { return i; }else if(i < pivotIndex) { return select(numbers, left, pivotIndex - 1, i); }else { return select(numbers, left,