首页 > 编程知识 正文

python有两种运行方式,快速排序算法python

时间:2023-05-05 06:49:57 阅读:29338 作者:4156

前言你为什么要写这个博客? 快速排序方法在网上搜索很多,已经很全面了。 好久没排序算法了。 下午我想找博客快速评论一下。 然后看了150多个评论,基本上说那个博客的排序算法是错误的,和他们知道的排序算法不同。 有很多评论说,请马上删除,不要误入歧途。 我仔细看算法,实际运行确实和我以前知道的排序算法不同,但是排序结果没有问题。 该算法快速排列了切分的思想,然后才知道这是《啊哈,算法》一书中的方法。

(个人来说bb很多。 看看那篇文章下面的评论,真是现代网络评论的缩影。 还是自己写博客,综合一下快速排序的算法吧。 )

后来写这篇文章的时候,一边读别人的文章,还是觉得自己写的很糟糕。 我也觉得写这个博客很傻。 总之继续努力吧。 我的博客不是很好。

1 .快速排序(挖洞法)你在网上看到的大部分是双指针快速排序法,也就是我介绍的第一种快速排序方法。 为简单起见,给出组数{4、1、2、7、6、3、5}。 按快速排序对此组数进行排序。

首先,从该组中随机选择一个数据基准数。 我们对每一回合进行排名的是,把大于基准数的数放在其右侧,把小的数放在左侧。 (我们给两组的第一个数和最后一个数)哨兵) (指针)。 右边的哨兵先动,依次向左,找到比基准数小的数并交换基准数。 此时,是右边哨兵的指向标准数。 左哨又动了,依次往右走,找到比基准数大的数进行交换。 此时,左哨指的是基准数。 直到两个“哨兵”相遇结束,这个排名才结束。 流程如下: 接着,以基准数分割{3、1、2}和{6、7、5},使上述过程循环。

代码实现(python ) import numpy as npimport sys#设置随机种子NP.random.seed(0)以获取随机数nums=NP.random.randint ) 10, 得到一组size=(8)8) )2) print(nums ) )在此,选择各组数的第一个数字作为基准数,根据defquicksort(nums,left, right ) : if left=right 3360 return0base number=)不随机选择=j : whilejiandnums [ j ]=base number 3360 j-=1ifji 3360 nums[j]=nums[j],nums [ I ] whileijandnums [ I ]=base number 3360 I=1ifij : nums [ I ],nums[j]=nums[j], 应该是我前言中提到的报道,详细叙述了。 点击这里!

我简单地说,这个排行榜和以前一样,右哨兵先开始移动,找到比基准数小的数。 但是,那个不着急交换。 然后左哨开始移动,找到大于基准数的数字。 然后交换两个“哨兵”的值。 之后,继续上述操作,指导两名“哨兵”相遇。 而且,还没有结束。 哨兵相遇时指定的数量与基准数量进行了交换,此时终于结束了一个回合。 (注意哨兵没有相遇的时候基准数的位置是没有改变的)

代码实际上只更改了一小部分,如下所示,代码为以下:

import numpy as npimport sys#如果设置随机种子NP.random.seed(0),则随机数nums=NP.random.randint ) 10,size=(8)8) prpre=j:whilejiandnums(j )=basenumber3360j(=1#此位置不再更换--------whileijandnums ) I )=basenumber3360I ) () nums[i]#此位置包含------------ nums[j],nums[left]=nums[left],nums[j]quicksort(nums,left ) 来图解一下吧。

定义前向索引prev和当前索引cur、left和right分别指向第一个和最后一个。

prev首先指向-1,cur指向prev的下一个位置0。 然后,将right指示的数定义为key,也就是最后的数。

运行规则: cur开始查找小于key的数字,并仅在找到小于key的数字时运行prev。 还有prev!=cur时运行swap(a[prev],a[cur] ),然后运行cur以知道key的上一个值将中止循环

动态过程如下:

代码实现: import numpy as npimport sys#如果设置随机种子NP.random.seed(0),则随机数nums=NP.random.randint ) 10, 得到一组size=(8)8) ) nums=)1)打印(nums ) defquicksort ) nums,left,right ) : if left=rightorightnums=cur ) : # )实现了两种元素的交换,python很简单呢。 nums[prev],nums[cur]=nums[cur],nums [ prev ] cur=1prev=1nums [ prev ],nums left,prev-1 ) quick sort (nt

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