目录

  • 😺一、算法原理
  • 🐶1.1 算法原理
  • 🐶1.2 算法步骤
  • 😺二、动图演示
  • 😺三、程序实现
  • 【千锤百炼Python—11】:十大排序算法总结(动画+代码)



快速排序是排序算法系列的第二个要介绍的算法!

快速排序既属于比较类排序也属于内部排序

😺一、算法原理

🐶1.1 算法原理

快速排序(Quick Sort)是对冒泡排序的一种提升,也属于交换排序的一种。

快速排序会对序列中的元素任选其一作为基准,以此基准,将小于基准值的元素放在基准值左边,大于基准值的元素放在基准值右边,两部分重复以此方法排序,最后整个序列完成排序。

🐶1.2 算法步骤

  • 步骤一:从数列中挑出一个元素,称为 “基准”(pivot);
  • 步骤二:重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
  • 步骤三:递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

😺二、动图演示

Python 快速排序矩形包含 python快速排序原理_递归

😺三、程序实现

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]