QuickSort 快速排序
Last updated
Last updated
将中任意移动到其左边,任意移动到其右边。需要如下操作:
(1) Partition函数第2行:令第一个元素作为;
(2) Partition函数第3-9行:轮流从最右边选出第一个移动到其左边,从最左边选出第一个移动到其右边,直到;
(3) Partition函数第10-11行:经过移动之后的位置即为最终的位置,将该位置返回给函数调用者;
设。从向左搜索第一个,令。
再从开始向右搜索第一个,令。
再从向左搜索第一个,令。
上述操作直到停止,此时的位置即为的位置,令就完成了本轮操作。
递归的对和进行该操作,即可完成整个数组排序:
设,则Partition函数的输入规模为,其时间复杂度为。
QuickSort函数的初始输入规模为,调用Partition的输入规模为,每次递归后输入规模为上一层的,可得:
类似MergeSort算法,该算法的时间复杂度为,因为所有操作都没有申请额外内存,是在原地完成,因此空间复杂度为。