面试必备算法|图解快速排序(Python)

简介: python图解快速排序

快速排序

快速排序的思想

​ 快速排序通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。具体步骤如下:

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

图解快速排序

​ 这里展示放置第一个基准的过程,首先选择第一个数字作为基准。

在这里插入图片描述

​ 接下来我们在26和20的位置分别设置两个指针low和high,并用maddle来存储基准的值(使得列表中基准的位置可以用于元素替换)

在这里插入图片描述

​ 现在我们的目的是让小的数字在前面,大的数字在后面,鉴于我们现在在第一个基准的位置可以用于元素的替换(此处可以看作为空),所以我们从high指针开始进行操作(遍历向前直到找到比基准小的数字)。

在这里插入图片描述

​ 此时我们可以知道high的位置为空,也就是说high的位置可以用作下一个元素的存储位置,因此此时我们转换到操作low指针,通过low指针找到比基准54大的元素。

在这里插入图片描述

​ 和上面同样的原理,我们再继续操作high指针(这里展示剩下交换的过程,如果理解交换过程可以跳过)

在这里插入图片描述

​ 最后如果我们再把指针进行左移操作,就会使得low和high指针重合,此时重合的位置也就是我们最开始找到的基准(54)的位置,至此,我们就可以把基准(54)放到该位置上了。

在这里插入图片描述

​ 此时我们会发现在54前面的数字都比54小,后面的数字都比54大,这也就证明我们已经找好了54的位置,后续我们将54作为切分点,把前面和后面分成两个子列表并递归的执行上诉同样思想的操作就可以了。

快速排序的性质

最优时间复杂度:$O(nlog_2n)$
最坏时间复杂度:$O(n^2)$
稳定性:不稳定

快速排序代码实现

# start/end表示起始指针的位置(不是具体的值)
lst = list(map(int, input().split(',')))


def quick_sort(alist, start, end):
    # 如果前指针的位置大于等于后指针的位置

    if start >= end:
        return

    low = start
    high = end
    middle = alist[low]

    while low < high:
        while low < high and alist[high] >= middle:
            high -= 1
        alist[low] = alist[high]
        while low < high and alist[low] <= middle:
            low += 1
        alist[high] = alist[low]
    alist[low] = middle

    quick_sort(alist, start, low - 1)
    quick_sort(alist, low + 1, end)


quick_sort(lst, 0, len(lst) - 1)
print(lst)
相关文章
|
6月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
7月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
347 26
|
7月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
350 0
|
7月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
526 0
|
7月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
574 4
|
7月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
912 4
|
7月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
365 3
|
7月前
|
算法 机器人 定位技术
【机器人路径规划】基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(Python代码实现)
【机器人路径规划】基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(Python代码实现)
463 4
机器学习/深度学习 算法 自动驾驶
1249 0
|
7月前
|
算法 定位技术 调度
基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)
基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)
338 0

推荐镜像

更多
下一篇
开通oss服务