reimplement Quicksorter