龙空技术网

Python冒泡法排序,选择法排序

程序员牧童 294

前言:

而今小伙伴们对“python冒泡算法对列表排序”大概比较重视,我们都想要学习一些“python冒泡算法对列表排序”的相关资讯。那么小编同时在网摘上搜集了一些有关“python冒泡算法对列表排序””的相关资讯,希望朋友们能喜欢,咱们一起来了解一下吧!

冒泡法排序:

"""冒泡法排序"""#一个数字列表,用于排序l = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]for i in range(len(l)): #从第1个数开始跟后面比较,i为下标,len(l)获取列表长度。    for j in range(i,len(l)):#用于比较的j,从i开始分别取值到最后一个。        if l[i] < l[j]: #如果当前值小于后面的值            l[i], l[j] = l[j], l[i] #当前值和和后的值做交换    print(f"{l}第{i+1}次") #查看每一次的结果

结果:

[50, 3, 38, 5, 44, 15, 36, 26, 27, 2, 46, 4, 19, 47, 48]第1次

[50, 48, 3, 5, 38, 15, 36, 26, 27, 2, 44, 4, 19, 46, 47]第2次

[50, 48, 47, 3, 5, 15, 36, 26, 27, 2, 38, 4, 19, 44, 46]第3次

[50, 48, 47, 46, 3, 5, 15, 26, 27, 2, 36, 4, 19, 38, 44]第4次

[50, 48, 47, 46, 44, 3, 5, 15, 26, 2, 27, 4, 19, 36, 38]第5次

[50, 48, 47, 46, 44, 38, 3, 5, 15, 2, 26, 4, 19, 27, 36]第6次

[50, 48, 47, 46, 44, 38, 36, 3, 5, 2, 15, 4, 19, 26, 27]第7次

[50, 48, 47, 46, 44, 38, 36, 27, 3, 2, 5, 4, 15, 19, 26]第8次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 2, 3, 4, 5, 15, 19]第9次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 2, 3, 4, 5, 15]第10次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 2, 3, 4, 5]第11次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 2, 3, 4]第12次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 4, 2, 3]第13次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 4, 3, 2]第14次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 4, 3, 2]第15次

可以看出来,最后第15次,与14次的结果是一样的,所以不用循环15次。因为第i个值,只需要与i后面的值进行比较。其实第二层循环j的值也可以少一次,这个自己慢慢体会吧(有点难度哦)。

优化后的代码:

"""冒泡法排序"""#一个数字列表,用于排序l = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]for i in range(len(l)-1): #不必跟自己比较,只需要与自身后面的值比较。循环可以少1次,所以-1    for j in range(i+1,len(l)):# j应该i的下一位,所以i+1        if l[i] < l[j]: #如果当前值小于后面的值            l[i], l[j] = l[j], l[i] #当前值和和后的值做交换    print(f"{l}第{i+1}次") #查看每一次的结果1

结果:

[50, 3, 38, 5, 44, 15, 36, 26, 27, 2, 46, 4, 19, 47, 48]第1次

[50, 48, 3, 5, 38, 15, 36, 26, 27, 2, 44, 4, 19, 46, 47]第2次

[50, 48, 47, 3, 5, 15, 36, 26, 27, 2, 38, 4, 19, 44, 46]第3次

[50, 48, 47, 46, 3, 5, 15, 26, 27, 2, 36, 4, 19, 38, 44]第4次

[50, 48, 47, 46, 44, 3, 5, 15, 26, 2, 27, 4, 19, 36, 38]第5次

[50, 48, 47, 46, 44, 38, 3, 5, 15, 2, 26, 4, 19, 27, 36]第6次

[50, 48, 47, 46, 44, 38, 36, 3, 5, 2, 15, 4, 19, 26, 27]第7次

[50, 48, 47, 46, 44, 38, 36, 27, 3, 2, 5, 4, 15, 19, 26]第8次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 2, 3, 4, 5, 15, 19]第9次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 2, 3, 4, 5, 15]第10次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 2, 3, 4, 5]第11次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 2, 3, 4]第12次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 4, 2, 3]第13次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 4, 3, 2]第14次

2.选择法排序:

"""选择法排序"""#一个数字列表,用于排序l = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]for i in range(len(l)-1):     k = i #k用于保存本轮的最大值的下标,初始值为当前值    for j in range(i+1,len(l)):        if l[k] < l[j]: #发现后面有更大值             k = j #记住更大值的下标    if k != i: #如果k发生了改变,意味着找到了更大值            l[i], l[k] = l[k], l[i] #当前值与最大值交换    print(f"{l}第{i+1}次") #查看每一次的结果1

结果:

[50, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 3, 48]第1次

[50, 48, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 3, 44]第2次

[50, 48, 47, 5, 38, 15, 36, 26, 27, 2, 46, 4, 19, 3, 44]第3次

[50, 48, 47, 46, 38, 15, 36, 26, 27, 2, 5, 4, 19, 3, 44]第4次

[50, 48, 47, 46, 44, 15, 36, 26, 27, 2, 5, 4, 19, 3, 38]第5次

[50, 48, 47, 46, 44, 38, 36, 26, 27, 2, 5, 4, 19, 3, 15]第6次

[50, 48, 47, 46, 44, 38, 36, 26, 27, 2, 5, 4, 19, 3, 15]第7次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 2, 5, 4, 19, 3, 15]第8次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 2, 5, 4, 19, 3, 15]第9次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 5, 4, 2, 3, 15]第10次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 4, 2, 3, 5]第11次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 2, 3, 4]第12次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 4, 3, 2]第13次

[50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 4, 3, 2]第14次

3.总结:

1.两种方法都能实现排序,循环的次数也一样。

2.区别是【冒泡法排序】每次内层循环比较后,都修改列表中的数值顺序。而【选择法排序】每次内层循环后,只是记录了最大值的位置。只有内层循环结束后,才将记录的最大值与外层循环的当前值做比较。发现最大值与当前值不一样,才改变列表中数值的顺序。

3.显然【冒泡法排序】更容易理解,适合编程入门,处理少量数据的时候。【选择法排序】难度略高,适合有一定编程基础,处理大量数据的时候。

分辨:

两种排序方法快速分辨也很容易,选择法排序里面有一个用于存储最大值位置的变量,没有就是冒泡法。

出错:

如果出现下面的提示,意味着索引下标越界

IndexError: list index out of range

索引错误:列表索引超出范围(下标越界)

你要读的位置,超出了列表范围。

感谢阅读!!!

多说一句,很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

标签: #python冒泡算法对列表排序