循环编程练习:Python实现冒泡排序

2020-03-2811:03:04编程语言入门到精通Comments1,949 views字数 1575阅读模式

做一个关于循环的练习,来加深大家的学习成果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

这个练习叫什么呢?我们就用Python实现冒泡排序文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

冒泡排序

要学习冒泡排序必须知道它的原理:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了。(图中排好序的元素标记为黄色柱子)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

说得不清楚,我们看看下面的动图就应该明白了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

代码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

下面,我们就进入代码环节。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

现在,我给你一个文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

nums = [3,1,25,6,8,10,15]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

,要求你用Python将nums实现冒泡排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

看上去很难入手,其实很简单,我先给出代码文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

nums = [3,1,25,6,8,10,15]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

for i in range(len(nums)-1):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

for j in range(len(nums) - i -1):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

if nums[j] > nums[j+1]:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

nums[j],nums[j+1] = nums[j+1],nums[j]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

print("第"+str(j)+"次内循环"+str(nums))文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

print("第"+str(i)+"次外循环"+str(nums))文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

print("最后的结果"+str(nums))文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

我们先遍历nums,这不就是我们的range(len(nums)-1),至于为什么是range(len(nums)-1),其实就是我们的下标从0开始的,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

len(nums)返回是7,range是左开右闭,但是冒泡排序,我们只需要取到文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

nums[5] = 10 就足够了,所以这里range(len(nums)-1),取到[3,1,25,6,8,10]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

。然后,我们在遍历之后的nums,比如i = 0,我们将j文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

取值范围到len(nums) - i -1,用nums[j] > nums[j+1]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

判断两两的大小, 每次内循环将最大的移到最右边。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

每一次内循环的目的就是将当中最大的移到最右边,而每一次外循环的目的就是当最大的移到最右边后,缩小范围,再寻找最大的数,再把它移到最右边。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

我们执行上面的代码的结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第0次内循环[1, 3, 25, 6, 8, 10, 15]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第1次内循环[1, 3, 25, 6, 8, 10, 15]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第2次内循环[1, 3, 6, 25, 8, 10, 15]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第3次内循环[1, 3, 6, 8, 25, 10, 15]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第4次内循环[1, 3, 6, 8, 10, 25, 15]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第5次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第0次外循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第0次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第1次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第2次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第3次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第4次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第1次外循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第0次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第1次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第2次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第3次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第2次外循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第0次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第1次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第2次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第3次外循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第0次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第1次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第4次外循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第0次内循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

第5次外循环[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

最后的结果[1, 3, 6, 8, 10, 15, 25]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

我们可以看到,第0次外循环,已经将25放在了最右边,第1次外循环确定把15放到最右边,这样从右往左,从大到小,这就是完整的冒泡排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/17940.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/17940.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定