public static void qsHelpQuant( int lo, int hi, LinkedList<StockPosition> d ) {
	if ( lo >= hi )
	    return;

	int tmpLo = lo; 
	int tmpHi = hi;
	int pivot = d.get(lo).getNumShares();
	StockPosition pivotStock = d.get(lo);

	while( tmpLo < tmpHi ) {
	    //first, slide markers in as far as possible without swaps
	    while( d.get(tmpLo).getNumShares() < pivot )  tmpLo++;
	    while( d.get(tmpHi).getNumShares() > pivot )  tmpHi--;

	    if ( d.get(tmpLo).getNumShares() != d.get(tmpHi).getNumShares() )
		swap( tmpLo, tmpHi, d );

	    //dupe vals found at markers
	    else if ( tmpLo < tmpHi ) { 
		//extra chk for Lo<Hi bc of double marker moves below

		int dupe = d.get(tmpHi).getNumShares();

		//if dupe is pivot val, put in lower range
		if ( dupe == pivot ) {
		    swap( ++tmpLo, tmpHi, d );
		}
		else if ( dupe > pivot ) {
		    //slide upper marker inward 1 pos, then swap
		    swap( tmpLo, --tmpHi, d );
		    //slide upper marker inward again to get past 2nd dupe val
		    tmpHi--;
		}
		else { //dupe < pivot
		    swap( ++tmpLo, tmpHi, d );
		    tmpLo++;
		}
	    }
	}//end big while

	//pivot has been floating around... plant it where it belongs
	d.set(tmpLo, pivotStock);

	//recurse on lower and upper ranges
	qsHelpQuant( lo, tmpLo-1, d );
	qsHelpQuant( tmpLo+1, hi, d );
}