目录
- 😺一、算法原理
- 🐶1.1 算法原理
- 🐶1.2 算法步骤
- 😺二、动图演示
- 😺三、程序实现
- 【千锤百炼Python—11】:十大排序算法总结(动画+代码)
快速排序是排序算法系列的第二个要介绍的算法!
快速排序既属于比较类排序也属于内部排序。
😺一、算法原理
🐶1.1 算法原理
快速排序(Quick Sort)是对冒泡排序的一种提升,也属于交换排序的一种。
快速排序会对序列中的元素任选其一作为基准,以此基准,将小于基准值的元素放在基准值左边,大于基准值的元素放在基准值右边,两部分重复以此方法排序,最后整个序列完成排序。
🐶1.2 算法步骤
- 步骤一:从数列中挑出一个元素,称为 “基准”(pivot);
- 步骤二:重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
- 步骤三:递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
😺二、动图演示
😺三、程序实现
def quicksort(list, start, end):
# 递归终止条件
if start >= end:
return
# low为序列左边要移动的游标
low = start
# high为序列右边要移动的游标
high = end
# 将起始元素设为要寻找位置的基准元素
base = list[start]
while low < high:
# 如果序列后边的数大于或等于基准数,则将其前移一位直到有比基准数小的数
while low < high and list[high] >= base:
high -= 1
# 如果序列后边的数比基准元素小,就跳出循环,并且把其放在基准数左边
list[low] = list[high]
# 以同样的方法重复前半区
while low < high and list[low] < base:
low += 1
# 如果比基准数大,就跳出循环,并且把其放在基准数右边
list[high] = list[low]
# 进行第一轮比较之后,整个序列被分为上下两个半区,此时low=high,并得到base的排序位置。
list[low] = base
# 对序列的上下半区进行递归
quicksort(list, start, low - 1) # 对左边的序列进行递归
quicksort(list, low + 1, end) # 对右边的序列进行递归
if __name__ == '__main__':
list = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
quicksort(list, 0, len(list) - 1)
print(list)
输出结果为:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]