2019年11月23号星期六的区级达标考试中的冒泡算法,我不会,回来后查询一下方可得知:
冒泡排序(顺序形式),就是从左向右,两两比较,如果左边元素大于右边的,就交换两个元素的位置。
其中每一轮排序,序列中最大的元素浮动到最右面。也就是说,每一轮排序,至少确保有一个元素在正确的位置。
这样接下来的循环,就不需要考虑已经排好的元素了,每次内层循环次数都会-1.
其中,如果有一轮循环之后,次序并没有交换,这时我们就可以停止循环,得到我们想要的有序序列了。
在python3中实现的冒泡算法如下:
先分析原理:例如将 [15,4,23,56,48,72,8]这个数值进行冒泡排序
======第 一 轮:(用 i 表示)======
########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-1=6)#########
先 15 和 4 比较, 交换位置; #比较1次
15 和 23 比较,位置不变; #比较2次
23 和 56 比较,位置不变; #比较3次
56 和 48 比较,交换位置; #比较4次
56 和 72 比较,位置不变; #比较5次
72 和 8 比较,交换位置; #比较6次
第一轮之后,数组变成了[4,15,23,48,56,8,72]
======第 二轮:(用 i 表示)======
########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-2=5)#########
由 [4,15,23,48,56,8,72]再开始:
4 和 15 比较, 不变; #比较1次
15 和 23 比较; 不变; #比较2次
23 和 48 比较; 不变; #比较3次
48 和 56 比较; 不变; #比较4次
56 和 8 比较 ;交换位置; #比较5次
到目前,数组变成[4,15,23,48,8,56,72]
======第 三 轮:(用 i 表示)======
########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-3=4)#########
由 [4,15,23,48,8,56,72]开始:
4 和 15 比较 结果 不变; #比较1次
15 和 23 比较 结果 不变; #比较2次
23 和 48 比较 结果 不变; #比较3次
48 和 8 比较 结果 交换位置; #比较4次
到目前,数组变成 [4,15,23,8,48,56,72]
======第 四 轮:(用 i 表示)======
########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-4=3)#########
由 [4,15,23,8,48,56,72]为基础开始:
4 和 15 比较 结果 不变; #比较1次
15 和 23 比较 结果 不变; #比较2次
23 和 8 比较 结果 交换位置; #比较3次
本轮结束,到目前,数组为[4,15,8,23,48,56,72]
======第 五 轮:(用 i 表示)======
########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-5=2)#########
由[4,15,8,23,48,56,72]开始:
4 和 15 比较 不变; #比较1次
15 和 8 比较 交换位置; #比较2次
到目前,数组为[4,8,15,23,48,56,72]
======第 六 轮:(用 i 表示)======
########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-6=1)#########
由[4,8,15,23,48,56,72]开始
4 和 8 比较 结果 不变; #比较1次
结束,所以最终结果为:[4,8,15,23,48,56,72]
总共进行了六轮比较,每一轮中都是进行了 数组的长度 - 比较的轮数 = 每一轮中比较的次数;
根据上边的分析,得出以下代码:
在python中,我们可以用一下代码实现:
def bubble_sort(num):
for i in range(len(num) - 1):
for j in range(len(num) - 1 - i):
if num[j] > num[j + 1]:
num[j],num[j+1] = num[j+1],num[j]
return num
print(bubble_sort([15,4,23,56,48,72,8]))
网友评论