快速排序算法(Quick Sort)
快速排序算法是一种递归排序算法;
- 其原理是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
- 简单点理解就是:以序列中的任意一个元素为基准(一般以第一个元素),通过逐个比较后,找到这个基准元素的合适位置(即在基准元素的左边元素都比它小,右边都比它大),这时在将序列分成左右两个部分,在继续上述的操作,直到不能再分为止(只有一个元素),此时排序也就完成。
快速排序过程图
快速排序算法的python实现
快速排序算法的代码实现最主要的是找到基准元素的位置,然后分成两部分,再用递归的方法,重复实现一样的操作。
代码如下:
def quick_sort(alist, first, last):
"""快速排序"""
# 参数first,last:指定序列排序的位置起始和终止下标
# 只有当first小于last时才退出排序,此时元素只有一个。
if first >= last:
return alist
else:
mid_value = alist[first]
low = first
high = last
while low < high:
# high 左移
while low < high and alist[high] >= mid_value:
high -= 1
alist[low] = alist[high]
# 此时alist[low]的值已经小于或等于mid_value
# low 右移
while low < high and alist[low] < mid_value:
low += 1
alist[high] = alist[low]
# 从循环退出时,low等于high
alist[low] = mid_value
# 对low左边的列表进行快速排序
quick_sort(alist, first, low-1)
# 对low右边的列表进行快速排序
quick_sort(alist, low+1, last)
或者:
def quick_sort2(alist):
if len(alist) <= 1:
return alist
left = list()
right = list()
# 以序列中的第一个元素作为基准元素,将序列以基准元素分成两部分
for elem in alist[1:]:
if elem <= alist[0]:
left.append(elem)
else:
right.append(elem)
# 合并时,需要都是list类型,所以需将基准元素变成list类型
return quick_sort2(left) + [alist[0]] + quick_sort2(right)
快速排序算法的时间复杂度与稳定性
- 最优时间复杂度:O(nlogn) ---- >每次分组都对半分
- 最坏时间复杂度:O(n2) ----> 每次分组只能分为基准元素和比基准元素大(或小)的部分,也就是每次分组只有一组进行递归。
- 稳定性:不稳定
来源:CSDN
作者:Hajo_
链接:https://blog.csdn.net/weixin_44013214/article/details/104556784