ad

打开《Python入门与实战》_一步步学会Python_5.2.5 排序与查找算法

admin 66 2023-10-25

【摘要】 本书摘自《Python入门与实战》一书中第5章,第2节,由王跃进主编。

5.2.5 排序与查找算法

有一个猜数游戏:甲先想好一个小于1000的自然数,乙的任务是猜出这个数。乙 每猜一个数,甲会说“大了”“小了”或“正确”。如果你是乙,你能保证在十次之内 猜中吗?

打开《Python入门与实战》_一步步学会Python_5.2.5 排序与查找算法

将一组数据按从小到大(或从大到小)的顺序排列就称为排序,实现排序的方法 就称为排序算法。虽然 Python已经为我们提供了sort()方法用于排序,但是排序方法 是如何工作的呢?下面介绍几种经典的排序算法和二分查找法。

假设列表li=[33,11,23,67,46,2], 现要求将列表变为li=[2,11,23,33,46,67]。

1. 冒泡排序

算法分析:依次比较相邻的两个数,将小数放在前面,大数放在后面。

第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个 数和第3个数,将小数放前,大数放后,以此类推,直到比较最后两个数,将小数放 前,大数放后。最后一个数为最大数。

第二趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2数和第3个数,将小数放前,大数放后,以此类推,直到比较除最后一个数外的两个 数,将小数放前,大数放后。

重复以上过程,直到最后一趟只比较第1个和第2个数时为止。

实现代码:

01 def bubble sort(li):

02 """冒泡排序算法"""

03 n=len(li)- 1

04 for i in range(n):

05 for j in range(n-i):

06 if li[j]>li[j+1]:

07 li[j],li[j+1]= li[j+1],li[j] #交换两个数

08 li =[33,11,23,67,46,2]

09 bubble sort(li)

10 print(li)

第一趟结果: li=[11,23,33,46,2,67]

第二趟结果: li=[11,23,33,2,46,67]

第三趟结果: li=[11,23,2,33,46,67]

第四趟结果: li=[11,2,23,33,46,67]

第五趟结果: li=[2,11,23,33,46,67]

2. 选择排序

算法分析:首先比较第1个和第2个数,将小数放前,大数放后,然后比较第1 个数和第3个数,将小数放前,大数放后,如此继续,直至比较第1个数和最后1个 数为止。得到最小的一个元素,存放在第一个位置。然后用第2个数与后面的所有数 比较,得到第二小的元素,存放到第二个位置,重复这个步骤,直到全部待排序的数 据元素排完。即第一趟找到最小(最大)元素放到第1个位置,第二趟找到第二小(大) 的元素放到第2个位置, ……

实现代码:

def select sort(li):

"""选择排序算法"""

n=len(li)

fori in ng)

for j in range(i+1,n):

if li [i]>li[j]:

li[i],li[j]=li[j],li[i]

li=[33,11,23,67,46,2]

09 select sort(li)

10 print(li)

第一趟结果: li=[2,33,23,46,67,11]

第二趟结果: li=[2,11,23,46,67,33]

第三趟结果: li=[2,11,23,46,67,33]

第四趟结果: li=[2,11,23,33,67,46]

第五趟结果: li=[2,11,23,33,46,67]

在每次比较时,如果前面的数大于后面的数,则交换,我们可以修改为不交换, 只记录位置,待一趟比较完成后,再交换,这样每一趟只交换1次,可以缩短运行时 间,请你试试怎样修改代码?

3. 插入排序

算法分析:第一趟比较第2个元素和第1个元素,将小数放前,大数放后;第二 趟比较第3个元素和第2元素,将小数放前,大数放后,再比较第2个元素和第1元 素,将小数放前,大数放后;第三趟比较第4个元素和第3个元素,将小数放前,大 数放后,再比较第3个元素和第2元素,将小数放前,大数放后,再比较第2个元素 和第1元素,将小数放前,大数放后。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:打开《Python入门与实战》_一步步学会Python_7.1 第 7 章 文件及目录操作
下一篇:打开《Python入门与实战》_一步步学会Python_8.3.7 算法总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×