快速排序算法一般来说是采用递归来实现,其最关键的函数是partition分割函数,其功能是将数组划分为两部分,一部分小于选定的pivot,另一部分大于选定的pivot。我们将重点放在该函数上面。
partition函数总体思路是自从一边查找,找到小于pivot的元素,则将其放到前面去,这样要达到的目的是使小于pivot的元素全部在前面,则大于pivot的元素就必然都在后面了。要达到此目的,有一点必须注意,就是在讲小于pivot的元素放到前面去的时候,一定要是紧挨着存放,否则空隙里面放的就可能会是大于pivot的元素,所以我们设置了一个storeIndex变量,并初始化为left来依次紧挨着存放小于pivot的元素。
由于刚开始并不知道最后pivot的存放位置,所以,需要先将pivot交换到后面去(如果是将大的元素依次放到后面就不需要这样的交换),然后遍历数组,找到小于的pivot的元素,就将其放到storeIndex处,并将storeIndex加1。在partition函数最后将pivot交换到storeIndex处。
在quicksort函数中,应特别注意!首先应当判断left时候小于right,以此作为递归返回的条件,还需根据条件设置pivot。
至于时间复杂度,考虑平均复杂度,