冒泡排序是一个种简单的排序算法,对需要排序的数列元素进行两两对比,并按照从小到大的顺序进行位置交换来实现对整个数列的排序。
算法描述:
冒泡排序算法的具体步骤及描述如下:
- 提取数列中的第一个元素,与数列中的下一个元素进行对比,如果第一个元素大于第二个元素则交换两者的位置。否则继续向后对比。
- 如果第一个元素小于第二个元素,则使用第二个元素继续向后进行两两对比。
- 针对数列中的所有三元素重复以上的步骤。
算法实现:
| Source code |
#导入随机数库
import random
#生成10个1-100之间的随机数
list=random.sample(range(1, 100), 10) | Source code |
#查看生成的10个随机数
list
[81, 23, 22, 56, 94, 47, 62, 6, 87, 17]
| Source code |
def bubble_sort(list):
#把list赋值给unsorted用于排序操作
unsorted=list[:]
#如果数据序列中只有一个数字,则不进行排序,直接返回数据序列
if len(unsorted)==1:
return print("list只有一个数字",unsorted)
else:
print("原始list:",unsorted)
# 循环提取unsorted中的每一个位置及数值与后面的数值进行比较
for i, _ in enumerate(unsorted):
print("待比较的位置:",i,"比较的数字:",unsorted[i])
# 循环提取unsorted中的每一个位置及数值用于比较
for i, _ in enumerate(unsorted):
#异常处理
try:
print("被比较的位置:",i+1,"被比较的数字",unsorted[i+1])
# 如果待比较位置的数值大于后面位置的数值
if unsorted[i] > unsorted[i+1]:
print("当前位置的数字",unsorted[i],"是否大于后面一个位置的数字:",unsorted[i+1],(unsorted[i] > unsorted[i+1]))
# 交换这两个数值的位置
unsorted[i], unsorted[i+1] = unsorted[i+1], unsorted[i]
print("交换两个数字的位置:","原数字",unsorted[i],"交换后的数字",unsorted[i+1])
#在对比的结尾出现IndexError: list index out of range
except IndexError:
# 忽略错误并继续
continue
# 输出本轮排序后的结果并换行
print("本轮排序后的结果:",unsorted,"\n")
bubble_sort(list)
原始list: [81, 23, 22, 56, 94, 47, 62, 6, 87, 17]
待比较的位置: 0 比较的数字: 81
被比较的位置: 1 被比较的数字 23
当前位置的数字 81 是否大于后面一个位置的数字: 23 True
交换两个数字的位置: 原数字 23 交换后的数字 81
被比较的位置: 2 被比较的数字 22
当前位置的数字 81 是否大于后面一个位置的数字: 22 True
交换两个数字的位置: 原数字 22 交换后的数字
81
被比较的位置: 3 被比较的数字 56
当前位置的数字 81 是否大于后面一个位置的数字: 56 True
交换两个数字的位置: 原数字 56 交换后的数字 81
被比较的位置: 4 被比较的数字 94
被比较的位置: 5 被比较的数字 47
当前位置的数字 94 是否大于后面一个位置的数字: 47 True
交换两个数字的位置: 原数字 47 交换后的数字 94
被比较的位置: 6 被比较的数字 62
当前位置的数字
94 是否大于后面一个位置的数字: 62 True
交换两个数字的位置: 原数字 62 交换后的数字 94
被比较的位置: 7 被比较的数字 6
当前位置的数字 94 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 94
被比较的位置: 8 被比较的数字 87
当前位置的数字 94 是否大于后面一个位置的数字: 87 True
交换两个数字的位置: 原数字 87 交换后的数字 94
被比较的位置: 9 被比较的数字 17
当前位置的数字 94 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 94
本轮排序后的结果: [23, 22, 56, 81, 47, 62, 6, 87, 17, 94]
待比较的位置: 1 比较的数字: 22
被比较的位置: 1 被比较的数字 22
当前位置的数字 23 是否大于后面一个位置的数字: 22 True
交换两个数字的位置: 原数字 22 交换后的数字 23
被比较的位置: 2 被比较的数字 56
被比较的位置: 3 被比较的数字 81
被比较的位置: 4 被比较的数字 47
当前位置的数字 81 是否大于后面一个位置的数字: 47 True
交换两个数字的位置: 原数字 47 交换后的数字
81
被比较的位置: 5 被比较的数字 62
当前位置的数字 81 是否大于后面一个位置的数字: 62 True
交换两个数字的位置: 原数字 62 交换后的数字 81
被比较的位置: 6 被比较的数字 6
当前位置的数字 81 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 81
被比较的位置: 7 被比较的数字 87
被比较的位置: 8 被比较的数字 17
当前位置的数字
87 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 23, 56, 47, 62, 6, 81, 17, 87, 94]
待比较的位置: 2 比较的数字: 56
被比较的位置: 1 被比较的数字 23
被比较的位置: 2 被比较的数字 56
被比较的位置: 3 被比较的数字 47
当前位置的数字 56 是否大于后面一个位置的数字: 47 True
交换两个数字的位置: 原数字 47 交换后的数字 56
被比较的位置: 4 被比较的数字 62
被比较的位置: 5 被比较的数字 6
当前位置的数字 62 是否大于后面一个位置的数字: 6 True
交换两个数字的位置:
原数字 6 交换后的数字 62
被比较的位置: 6 被比较的数字 81
被比较的位置: 7 被比较的数字 17
当前位置的数字 81 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 23, 47, 56, 6, 62, 17, 81, 87, 94]
待比较的位置: 3 比较的数字: 56
被比较的位置: 1 被比较的数字 23
被比较的位置: 2 被比较的数字 47
被比较的位置: 3 被比较的数字 56
被比较的位置: 4 被比较的数字 6
当前位置的数字 56 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 56
被比较的位置: 5 被比较的数字 62
被比较的位置: 6 被比较的数字 17
当前位置的数字 62 是否大于后面一个位置的数字:
17 True
交换两个数字的位置: 原数字 17 交换后的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 23, 47, 6, 56, 17, 62, 81, 87, 94]
待比较的位置: 4 比较的数字: 56
被比较的位置: 1 被比较的数字 23
被比较的位置: 2 被比较的数字 47
被比较的位置: 3 被比较的数字 6
当前位置的数字 47 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 47
被比较的位置: 4 被比较的数字 56
被比较的位置: 5 被比较的数字 17
当前位置的数字 56 是否大于后面一个位置的数字: 17 True
交换两个数字的位置:
原数字 17 交换后的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 23, 6, 47, 17, 56, 62, 81, 87, 94]
待比较的位置: 5 比较的数字: 56
被比较的位置: 1 被比较的数字 23
被比较的位置: 2 被比较的数字 6
当前位置的数字 23 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 23
被比较的位置: 3 被比较的数字 47
被比较的位置: 4 被比较的数字 17
当前位置的数字 47 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [22, 6, 23, 17, 47, 56, 62, 81, 87, 94]
待比较的位置: 6 比较的数字: 62
被比较的位置: 1 被比较的数字 6
当前位置的数字 22 是否大于后面一个位置的数字: 6 True
交换两个数字的位置: 原数字 6 交换后的数字 22
被比较的位置: 2 被比较的数字 23
被比较的位置: 3 被比较的数字 17
当前位置的数字 23 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 23
被比较的位置: 4 被比较的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [6, 22, 17, 23, 47, 56, 62, 81, 87, 94]
待比较的位置: 7 比较的数字: 81
被比较的位置: 1 被比较的数字 22
被比较的位置: 2 被比较的数字 17
当前位置的数字 22 是否大于后面一个位置的数字: 17 True
交换两个数字的位置: 原数字 17 交换后的数字 22
被比较的位置: 3 被比较的数字 23
被比较的位置: 4 被比较的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字
81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]
待比较的位置: 8 比较的数字: 87
被比较的位置: 1 被比较的数字 17
被比较的位置: 2 被比较的数字 22
被比较的位置: 3 被比较的数字 23
被比较的位置: 4 被比较的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [6,
17, 22, 23, 47, 56, 62, 81, 87, 94]
待比较的位置: 9 比较的数字: 94
被比较的位置: 1 被比较的数字 17
被比较的位置: 2 被比较的数字 22
被比较的位置: 3 被比较的数字 23
被比较的位置: 4 被比较的数字 47
被比较的位置: 5 被比较的数字 56
被比较的位置: 6 被比较的数字 62
被比较的位置: 7 被比较的数字 81
被比较的位置: 8 被比较的数字 87
被比较的位置: 9 被比较的数字 94
本轮排序后的结果: [6,
17, 22, 23, 47, 56, 62, 81, 87, 94]
| Source code |
def bubble_sort(list):
unsorted=list[:]
if len(unsorted)==1:
return print("list只有一个数字",unsorted)
else:
print("原始list:",unsorted)
for i, _ in enumerate(unsorted):
for i, _ in enumerate(unsorted):
try:
if unsorted[i] > unsorted[i+1]:
unsorted[i], unsorted[i+1] = unsorted[i+1], unsorted[i]
except IndexError:
continue
print("排序后结果:",unsorted)
bubble_sort(list)
原始list: [81, 23, 22, 56, 94, 47, 62, 6, 87, 17]
排序后结果: [23, 22, 56, 81, 47, 62, 6, 87, 17, 94]
排序后结果: [22, 23, 56, 47, 62, 6, 81, 17, 87, 94]
排序后结果: [22, 23, 47, 56, 6, 62, 17, 81, 87, 94]
排序后结果: [22, 23, 47, 6, 56, 17, 62, 81, 87, 94]
排序后结果: [22, 23, 6, 47, 17, 56, 62, 81, 87, 94]
排序后结果: [22, 6, 23, 17, 47, 56, 62, 81, 87, 94]
排序后结果: [6, 22, 17, 23, 47, 56, 62, 81, 87, 94]
排序后结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]
排序后结果: [6, 17, 22, 23, 47, 56, 62, 81, 87,
94]
排序后结果: [6, 17, 22, 23, 47, 56, 62, 81, 87, 94]
—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—