快速排序(QuickSort)
工作原理:通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后按照这种方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
实现步骤:
1)从数列中挑出一个元素,当做基准
2)重新排序数列,所有元素比基准小的摆放在基准前面,所有比基准大的摆在基准的后面(想同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。
3)递归的把小于基准值元素的子数列和大于基准值元素的子数列排序。
Python代码实现:
# 快速排序
# 核心 递归
def quik_sort(value, start, stop, order=True):
if start >= stop:
return
mid = value[start]
low = start
hight = stop
while low < hight:
while low < hight and value[hight] > mid:
hight -= 1
value[low] = value[hight]
while low < hight and value[low] < mid:
low += 1
value[low] = value[hight]
value[low] = mid
quik_sort(value, start, low-1)
quik_sort(value, hight+1, stop)
if order:
return value
else:
return value[::-1]
print '快排', quik_sort([4, 1, 55, 18, 10], 0, 4, False)
时间复杂度:
最优时间复杂度:O(nlogn)
最坏时间复杂度:O(n^2)
稳定性:不稳定
快速排序动态图演示: