Python快速排序板子 分而治之

简介: Python快速排序板子 分而治之

目录:

一:个人阅读完《算法图解》快速排序后写的代码

二:参考官方代码及个人总结


一:所谓分而治之(divide and conquer,D&C)是一种递归式解决方法


工作原理:(1)找出简单的基线条件(2)确定如何缩小问题规模使其符合基线条件


下面以一个例子来解释[源自算法图解]:

image.png



image.png


相信聪明的你看到这里大致就清晰了,如果还是不懂想看到最后可以找我给你pdf版的算法图解哈

(我本人是使用纸质的学习起来比较方便)

快速排序分析 :简言之就是给你一个列表 取一个元素作为基准值,大的放它左(右)边,小的放它右(左)边,再对两侧列表快速排序,再取基准值.....不断缩小规模

个人代码:

#基线条件 分区
def sorta(list):
    if len(list)==1:
        return list
    elif len(list)==0:
        return []
    else:
        start,end=0,len(list)-1
        mid=(start+end)//2
        left,right=[],[]
        for i in list:
            if i!=list[mid]:
                if i<=list[mid] :
                    left.append(i)
                else:
                    right.append(i)
        return sorta(left)+[list[mid]]+sorta(right)



个人写的还是很冗长,对比了官方代码,总结了以下几点:


1:基准值的选取对排序影响不大,为简便起见选择首元素作为基准值(我一开始以为和对分查找有什么关系= =)


2:基线条件就是len(list)<2,一开始担心万一调用自身时传入的参数对报错(传入一个什么都没有的东西)后来发现 已经创建了left right>>list  那么经历基线条件是参数就没有问题


3:列表解析式会更加简洁效率更高!将四行代码换成一行0.0!!

#写法1
less=[i for i in array[1:] if i<=pivot]
print(less)
#下面是写法2:
less=[]
for i in array[1:]:
    if i<=pivot:
        less.append[i]
print(less)


官方代码(宝藏) :


def quicksort(array):
    if len(array)<2:
        return array#每次递归调用自身 参数一定是列表 基线条件:单元素列表和空列表都返回自身
    else:
         pivot=array[0]#选择哪个元素作为基准值都可以
         less=[i for i in array[1:] if i<=pivot]
         greater=[i for i in array[1:] if i>pivot]#优势在于省去了append,因为‘分区’不包括mid,这里利用切片使得代码更加简介
         return quicksort(less)+[pivot]+quicksort(greater)
#print(quicksort([1,4332,43,2,-2,-9,100000]))
#输出[-9, -2, 1, 2, 43, 4332, 100000]

好啦 我是小郑 希望和你在Python与编程的路越走越远


 

目录
相关文章
|
12天前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
27 1
|
1月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
|
6月前
|
搜索推荐 Python
PYTHON的快速排序
PYTHON的快速排序
48 0
|
4月前
|
搜索推荐 Python
快速排序:Python 中的速度之王,揭秘它的递归魔法与性能极限!
【7月更文挑战第12天】快速排序**是高效排序算法,基于分治策略。它选择基准值,将数组分成小于和大于基准的两部分,递归地对两部分排序。
61 6
|
4月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
【7月更文挑战第12天】Python的快速排序**以分治策略实现高效排序,平均时间复杂度$O(nlogn)$,优于$O(n^2)$的冒泡排序。基本实现通过选取基准元素分割数组,然后递归排序两部分。优化版使用随机基准避免最坏情况。对比显示优化后排序更稳定,适应不同数据集,提升程序性能。
58 4
|
4月前
|
算法 搜索推荐 编译器
算法高手养成记:Python快速排序的深度优化与实战案例分析
【7月更文挑战第11天】快速排序是编程基础,以O(n log n)时间复杂度和原址排序著称。其核心是“分而治之”,通过选择基准元素分割数组并递归排序两部分。优化包括:选择中位数作基准、尾递归优化、小数组用简单排序。以下是一个考虑优化的Python实现片段,展示了随机基准选择。通过实践和优化,能提升算法技能。**
56 3
|
5月前
|
搜索推荐 算法 Python
Python教程:使用Python实现冒泡排序和快速排序
排序算法根据其实现原理和效率可以分为多种类型,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。这些算法在不同的场景下具有不同的优劣势,需要根据实际需求选择合适的算法。
64 3
|
4月前
|
搜索推荐 Python
python实现冒泡排序、快速排序
python实现冒泡排序、快速排序
|
6月前
|
搜索推荐 算法 Python
python快速排序和冒泡排序
python快速排序和冒泡排序
50 8
|
6月前
|
算法 搜索推荐 C++
Python 快速排序:原理、使用场景与实现方法
本文主要介绍了Python 快速排序:原理、使用场景与实现方法
95 5