首页 > 编程知识 正文

python界面,python应用

时间:2023-05-05 14:24:21 阅读:29339 作者:1903

快速排序概述

快速排序也称为拆分交换排序,它从无序队列中提取元素,并将无序队列拆分为两个独立的部分。 其中一个部分的所有数据都小于其他部分的所有数据,用这种方法分别快速排序这两个部分的数据,然后递归地完成整个排序过程,从而使整个数据成为有序序列。

简而言之,选择要素,分组,分组,重复前两个步骤

快速排序原理示意图

在快速排序概述中,我们发现快速排序主要有两个方面:

选择要素分组,将整体递归分组

元素分类组图像:

特点:

1、因为是无序队列,所以位置可以随机选择

2、暂时划分保管我们选择的中间要素的空间

3、左标签位置空,移动右标签,反之亦然

4、重复3次直到左右侧标签指向同一位置,

5、将暂时保存的中间元素放回位置

一句话:左手右手一个慢动作,右手左手重播慢动作

整体分割图像:

特点:

1、递归分割

2、拆分到最后,所有组内元素个数为1

一句话:递归分割,不能再分割了

代码实践分析

根据上面两个模式图的分析,我们要从两个大方面进行分析:

序列切割和递归分割

1、顺序切割

测序这一知识点从四个方面分别介绍。

三个基本标签:右侧推进、左侧推进、停止推进(即元素归位) ) )。

1.1、三个基本标签

区域断开至少涉及三个标签。

mid指定要剪切的临时中间数字

左:从队列左侧推进的标签

right :从队列右侧推进的标签

defquick_sort(Li,start,end ) : #分区托管分为两个# start=end,证明要处理的数据只有一个# startend,右边是数据# start=end 将分别指向0和末尾位置的left=start right=end #的位置的数据,作为中间值mid=Li [ left ] while left right 3360 #使右光标向左移动,以找到比mid小的值为目的左光标位置whileleftrightandli [ right ]=mid : right-=1li [ left ]=Li [ right ] #将左光标向右移动,目的是找到大于mid的值right光标位置whileleftrightandli [ left ] mid : left=1li [ right ]=Li [ left ] # while结束后,将mid置于中间位置,left=right Li [ left-1 ) #递归处理右边的数据quick_sort ) Li,left 1,end ) if_ ) 3,2,1 ] # l=3[ 2,1,5,6,5,4 ] # [ 2,1

序列剪切:

1、选择中间元素: mid=alist[start]

2、右推进: whilerightleftandalist [ right ]=mid :

3、左推进: whileleftrightandalist [ left ] mid :

4、推动循环: while left right:

5、元素归位: alist[left]=mid

递归拆分:

1、组边界确定: left=start、right=end

2、递归终止条件: if start end:

3、函数的自调用: quick_sort(alist,start,end ) ) ) ) ) ) ) )。

时间的复杂性

最佳时间复杂度: o(nlogn ) ) ) ) ) ) ) )。

对于每个第一列,left和right的标签分别移动了左右2册数据的全部,相当于遍历了所有数据,时间复杂度为o(n )

因为涉及递归分组,所以他的时间复杂度是o(logn )

总的来说,最佳的时间复杂度是o(nlogn )

最差的时间复杂度: o(N2 ) ) ) ) ) ) ) )。

递归分组的条件不一定是两分钟,因此可能为每个mid指定最大值或最小值。 那么,有几个要素,我们可以分成几次组? 在这种情况下,时间复杂度为o(n )

因此,最坏的时间复杂性是o(n2 ),最差也不过如此。

稳定性:不稳定

思考:

改变哪个地方,结果是降序?

将wilerightleftandalist [ right ]=mid :代码中的=更改为=

while left right and a list [ left ] mid代码的

本节内容总结:

1、快速排序原理:选择要素,分组,分组重复前两步。

2、快速排序实践步骤:

分区组:准备工作左右移动要素归位

递归:函数自调用终止条件

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。