このパーティショニング コードの正確な問題点を突き止めるには、助けが必要です。私は数日間苦労していますが、頭を抱えているようには見えません。
pIdx はピボット インデックス、左と右は配列の境界整数オプション、配列 a は単なる配列または格納された long 値です。
protected static int partition(long[] a, int left, int right, int pIdx) {
//long numbers[] = {4,3,8,9,7,2,1,5};
long pivot = a[pIdx];
swap(a, pIdx, right);
int storeIndex = left;
for(int i=left; i<right; i++) {
if(a[i] <= pivot)
swap(a, i, storeIndex);
}//for
swap(a, right, storeIndex);
return storeIndex;
}//partitio