概念
冒泡排序是一种简单直观的排序算法;它重复的遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复的进行直到不再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经过交换慢慢“浮”到数列的顶端。
算法步骤:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续的对剩下的元素重复上面的步骤,直到没有任何一对数字需要比较。
动图演示:
Array = [2, 11, 10, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
解析:
Array = [2, 11, 10, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
if Array[1] > Array[2]:
Array[1], Array[2] = Array[2], Array[1]
print("交换完成之后的数组为:", Array)
交换完成之后的数组为:[2, 10, 11, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
Array = [2, 11, 10, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
for i in range(len(Array) - 1):
print("第" + str(i + 1) + "次对比\t" + str(Array[i]) + "\t和\t" + str(Array[i + 1]) + "\t交换完成之后的数组为:")
if Array[i] > Array[i + 1]:
Array[i], Array[i + 1] = Array[i + 1], Array[i]
print(Array)
第1次对比 2 和 11 交换完成之后的数组为:
[2, 11, 10, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
第2次对比 11 和 10 交换完成之后的数组为:
[2, 10, 11, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
第3次对比 11 和 5 交换完成之后的数组为:
[2, 10, 5, 11, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
第4次对比 11 和 4 交换完成之后的数组为:
[2, 10, 5, 4, 11, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
第5次对比 11 和 13 交换完成之后的数组为:
[2, 10, 5, 4, 11, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
第6次对比 13 和 9 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 13, 7, 8, 1, 12, 3, 6, 15, 14]
第7次对比 13 和 7 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 7, 13, 8, 1, 12, 3, 6, 15, 14]
第8次对比 13 和 8 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 7, 8, 13, 1, 12, 3, 6, 15, 14]
第9次对比 13 和 1 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 7, 8, 1, 13, 12, 3, 6, 15, 14]
第10次对比 13 和 12 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 7, 8, 1, 12, 13, 3, 6, 15, 14]
第11次对比 13 和 3 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 7, 8, 1, 12, 3, 13, 6, 15, 14]
第12次对比 13 和 6 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 7, 8, 1, 12, 3, 6, 13, 15, 14]
第13次对比 13 和 15 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 7, 8, 1, 12, 3, 6, 13, 15, 14]
第14次对比 15 和 14 交换完成之后的数组为:
[2, 10, 5, 4, 11, 9, 7, 8, 1, 12, 3, 6, 13, 14, 15]
Array = [2, 11, 10, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
for j in range(1, len(Array)):
print("现在开始确定从后面数第" + str(j) + "个元素")
for i in range(len(Array) - j):
if Array[i] > Array[i + 1]:
Array[i], Array[i + 1] = Array[i + 1], Array[i]
print("排序完成的数组为:", Array)
现在开始确定从后面数第1个元素
排序完成的数组为:[2, 10, 5, 4, 11, 9, 7, 8, 1, 12, 3, 6, 13, 14, 15]
现在开始确定从后面数第2个元素
排序完成的数组为:[2, 5, 4, 10, 9, 7, 8, 1, 11, 3, 6, 12, 13, 14, 15]
现在开始确定从后面数第3个元素
排序完成的数组为:[2, 4, 5, 9, 7, 8, 1, 10, 3, 6, 11, 12, 13, 14, 15]
现在开始确定从后面数第4个元素
排序完成的数组为:[2, 4, 5, 7, 8, 1, 9, 3, 6, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第5个元素
排序完成的数组为:[2, 4, 5, 7, 1, 8, 3, 6, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第6个元素
排序完成的数组为:[2, 4, 5, 1, 7, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第7个元素
排序完成的数组为:[2, 4, 1, 5, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第8个元素
排序完成的数组为:[2, 1, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第9个元素
排序完成的数组为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第10个元素
排序完成的数组为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第11个元素
排序完成的数组为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第12个元素
排序完成的数组为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第13个元素
排序完成的数组为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
现在开始确定从后面数第14个元素
排序完成的数组为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
这里我们使用自定义函数来完成冒泡排序:
def bubble_Sort(arr):
for i in range(1, len(arr)):
for j in range(len(arr) - i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
Array = [2, 11, 10, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
print(bubble_Sort(Array))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
如需了解每一步做了什么,请复制以下代码:
def bubble_Sort(arr, count):
for i in range(1, len(arr)):
print("现在数组中一共有" + str(len(arr) - i + 1) + "个元素需要进行排序,排序方式为:升序")
for j in range(len(arr) - i):
count += 1
if arr[j] > arr[j + 1]:
print("第\t" + str(count) + "\t次对\t" + str(arr[j]) + "\t和\t" + str(arr[j + 1]) + "\t进行对比,需要替换位置")
arr[j], arr[j + 1] = arr[j + 1], arr[j]
print("替换完成的数组为:", arr)
else:
print("第\t" + str(count) + "\t次对\t" + str(arr[j]) + "\t和\t" + str(arr[j + 1]) +
"\t进行对比,不需要替换位置,数组和上次没有变化")
return arr
Array = [2, 11, 10, 5, 4, 13, 9, 7, 8, 1, 12, 3, 6, 15, 14]
Count = 0
print("现在有一个需要排序的数组:", Array)
print("排序完成,最终返回结果为:", bubble_Sort(Array, Count))
部分执行效果展示:
Python是一门非常不错的编程语言,薪资待遇高、就业前景好。即使你不想出去上班,也可以利用Python在家做兼职(比如爬取客户需要的数据、量化交易、代写程序等)。
如果你对Python感兴趣,想通过学习Python获取更高的薪资,那下面这套Python学习资料一定对你有用!
资料包括:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。0基础小白也能听懂、看懂,跟着教程走,带你从零基础系统性地学好Python!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python学习软件
工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
三、Python入门学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
四、Python练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
五、Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~
六、Python面试资料
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
七、资料领取
上述完整版Python全套学习资料已经上传CSDN官方,需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取