some explanations for quicksort