This document describes sequential and parallel quicksort algorithms. Sequential quicksort has average complexity of O(n log n) but worst case of O(n^2). Parallel quicksort partitions the array, sorts subarrays in parallel threads, and waits for threads to complete to improve performance over sequential quicksort. It uses a queue to store threads if processors are busy and chooses split keys through various methods like first element or median. New threads are only created if the subarray size is above a minimum to reduce overhead.