private static int partition(double[] data, int first, int
last) {
double pivot =
data[first];
int tooBigIndex = first + 1;
int tooSmallIndex
= last;
while
(tooBigIndex <= tooSmallIndex) {
while
(tooBigIndex <= last && data[tooBigIndex] <= pivot) {
tooBigIndex++; }
while (data[tooSmallIndex] > pivot)
{
tooSmallIndex--;}
if (tooBigIndex < tooSmallIndex)
{
double temp = data[tooBigIndex];
data[tooBigIndex] = data[tooSmallIndex];
data[tooSmallIndex] = temp;
}
}
data[first] =
data[tooSmallIndex];
data[tooSmallIndex] = pivot;
return
tooSmallIndex;
}