# 排序之快速排序

2 min read

快速排序采用了分治法的思想。快速排序先把大数组划分成两个数组,使得一边的数组关键字均大于另一边的数组关键字。然后分别对两个数组关键字递归排序。

image
图片来源:维基百科

  • 快速排序是一种不稳定的排序。
  • 快速排序的平均时间复杂度为 O(nlogn),最坏的情况下时间复杂度为 O(n2)。
  • 快速排序的空间复杂度为 O(logn)。

具体做法:

  • 从数组中选择一个关键字,称为枢轴(pivot)。
  • 划分:重新排序数组,使得所有小于枢轴的元素都在枢轴前面,所有大于枢轴的元素都在枢轴后面。最后,枢轴所在的位置就是它在数组中最终的位置。
  • 递归:对划分好的两个数组递归调用上面的步骤。

快速排序的伪代码:

ALGORITHM quicksort(A, lo, hi)
IF lo < hi THEN
p ← partition(A, lo, hi)
quicksort(A, lo, p - 1)
quicksort(A, p + 1, hi)
END IF
END ALGORITHM
ALGORITHM partition(A, lo, hi)
pivot ← A[hi]
i ← lo
FOR j ← lo TO hi -1 DO
IF A[j] < pivot THEN
IF i != j THEN
swap A[i] with A[j]
END IF
i ← i + 1
END IF
END FOR
swap A[i] with A[j]
return i
END ALGORITHM

More Posts

# 排序之归并排序

3 min read

归并排序采用了分治法的思想。归并排序就是将序列中前后相邻的两个有序序列归并为一个有序序列。

# 排序之堆排序

2 min read

堆排序可以分成两步,一:将给定的数组建立成堆。 二:不断的移除根节点,然后重组堆。并移除的根节点插入到数组中。