Partition algorithm