internal void SortArray(int left, int right){
ArrayObject array = (ArrayObject)this.obj;
Object x, y;
if (right > left){
int piv = left + (int)((right - left)*MathObject.random());
x = array.denseArray[piv];
array.denseArray[piv] = array.denseArray[right];
array.denseArray[right] = x;
int i = left - 1, j = right;
while(true){
do{
y = array.denseArray[++i];
}while(i < j && this.Compare(x, y) >= 0);
do{
y = array.denseArray[--j];
}while(j > i && this.Compare(x, y) <= 0);
if (i >= j)
break;
QuickSort.Swap(array.denseArray, i, j);
}
QuickSort.Swap(array.denseArray, i, right);
this.SortArray(left, i-1);
this.SortArray(i+1, right);
}
}