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

2020年3月28日11:03:04 发表评论 75 views

做一个关于循环的练习,来加深大家的学习成果。

这个练习叫什么呢?我们就用Python实现冒泡排序

冒泡排序

要学习冒泡排序必须知道它的原理:

所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了。(图中排好序的元素标记为黄色柱子)

说得不清楚,我们看看下面的动图就应该明白了

代码

下面,我们就进入代码环节。

现在,我给你一个

nums = [3,1,25,6,8,10,15]

,要求你用Python将nums实现冒泡排序。

看上去很难入手,其实很简单,我先给出代码

nums = [3,1,25,6,8,10,15]

for i in range(len(nums)-1):

for j in range(len(nums) - i -1):

if nums[j] > nums[j+1]:

nums[j],nums[j+1] = nums[j+1],nums[j]

print("第"+str(j)+"次内循环"+str(nums))

print("第"+str(i)+"次外循环"+str(nums))

print("最后的结果"+str(nums))

我们先遍历nums,这不就是我们的range(len(nums)-1),至于为什么是range(len(nums)-1),其实就是我们的下标从0开始的,

len(nums)返回是7,range是左开右闭,但是冒泡排序,我们只需要取到

nums[5] = 10 就足够了,所以这里range(len(nums)-1),取到[3,1,25,6,8,10]

。然后,我们在遍历之后的nums,比如i = 0,我们将j

取值范围到len(nums) - i -1,用nums[j] > nums[j+1]

判断两两的大小, 每次内循环将最大的移到最右边。

每一次内循环的目的就是将当中最大的移到最右边,而每一次外循环的目的就是当最大的移到最右边后,缩小范围,再寻找最大的数,再把它移到最右边。

我们执行上面的代码的结果如下:

第0次内循环[1, 3, 25, 6, 8, 10, 15]

第1次内循环[1, 3, 25, 6, 8, 10, 15]

第2次内循环[1, 3, 6, 25, 8, 10, 15]

第3次内循环[1, 3, 6, 8, 25, 10, 15]

第4次内循环[1, 3, 6, 8, 10, 25, 15]

第5次内循环[1, 3, 6, 8, 10, 15, 25]

第0次外循环[1, 3, 6, 8, 10, 15, 25]

第0次内循环[1, 3, 6, 8, 10, 15, 25]

第1次内循环[1, 3, 6, 8, 10, 15, 25]

第2次内循环[1, 3, 6, 8, 10, 15, 25]

第3次内循环[1, 3, 6, 8, 10, 15, 25]

第4次内循环[1, 3, 6, 8, 10, 15, 25]

第1次外循环[1, 3, 6, 8, 10, 15, 25]

第0次内循环[1, 3, 6, 8, 10, 15, 25]

第1次内循环[1, 3, 6, 8, 10, 15, 25]

第2次内循环[1, 3, 6, 8, 10, 15, 25]

第3次内循环[1, 3, 6, 8, 10, 15, 25]

第2次外循环[1, 3, 6, 8, 10, 15, 25]

第0次内循环[1, 3, 6, 8, 10, 15, 25]

第1次内循环[1, 3, 6, 8, 10, 15, 25]

第2次内循环[1, 3, 6, 8, 10, 15, 25]

第3次外循环[1, 3, 6, 8, 10, 15, 25]

第0次内循环[1, 3, 6, 8, 10, 15, 25]

第1次内循环[1, 3, 6, 8, 10, 15, 25]

第4次外循环[1, 3, 6, 8, 10, 15, 25]

第0次内循环[1, 3, 6, 8, 10, 15, 25]

第5次外循环[1, 3, 6, 8, 10, 15, 25]

最后的结果[1, 3, 6, 8, 10, 15, 25]

我们可以看到,第0次外循环,已经将25放在了最右边,第1次外循环确定把15放到最右边,这样从右往左,从大到小,这就是完整的冒泡排序。

发表评论

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