一 快速排序思想
基本思路还是根据分治法的思想得出的。
首先给定一个数组,然后在数组中选择一个值作为划分标记,然后将数组中剩余的值与这个标记值进行比较,大于标记值的放到标记值右边,小于标记值的放到标记值左边,这个过程就是一次划分过程,然后对标记值左边小于标记值的子数组再进行上述划分,对右边大于标记值的子数组也进行上述划分,实际上就是递归过程,直到最后递归完成,那么快速排序也就完成了。
二 快速排序算法实现
2.1 总体算法实现
QUICKSORT(A, p, r)
if (p < r)
q = PARTITION(A, p, r)
QUICKSORT(A, p, q-1)
QUICKSORT(A, q+1, r)
2.2 划分算法PARTITION实现
PARTIOTION(A, p, r)
x = A[r]
i = p - 1
for j = p to r - 1
if A[j] <= x
i = i + 1
exchange A[j] with A[i]
exchange A[i + 1] with A[r]
return i+1
三 快速排序算法分析
如果每次划分都是进行的最差划分,即划分成一个子数组为0个,另外一个子数组为 n - 1 个,每次都进行这样的划分,这样推算下来最差时间复杂度为 O(n * n)
只要划分不是最差划分,推算下来以后最差时间复杂度为 O(nlgn)
空间复杂度为O(1), 因为是原地址排序