还是老规矩,先上代码:
arr = [4,6,3,5,2,1]
def bubble_sort(arr):
n = len(arr) # 获取arr数组的长度
for j in range(0,n-1): # range() 函数可创建一个整数列表,一般用在 for 循环中。
print('j=',j)
for i in range(0,n-1-j): #
print('i=',i)
if arr[i]>arr[i+1]:
arr[i],arr[i+1] = arr[i+1],arr[i]
print('第',i+1,'次排序结果',arr)
else:
print('第',i+1,'次排序结果',arr)
print('-------------------------------------')
bubble_sort(arr)
代码中为了在控制台输出结果方便解释,用了很多的print。
-------------------------------------------------------------------------------------
第二个for循环
那么,开始吧。我们可以看到代码中有2个for循环,相信不少人难以理解为什么要用2个for循环?他们各自的作用又是什么呢?
上面可以看到在j=0,i=0到4的循环过程中,数值6一路向西,排到最后面。因为6已经和数组中所有数值比较过,所以可以确定在这次循环中,6是最大的没错。
那么,数值 6 已经排好序。在下一轮第二个for循环中,不再理会arr[4].
这也是为什么第二个for循环中有“n-1-j”。
因为当第二个for循环完成,数值6排好,此时的j=1。于是n-1-j=n-1-1,导致第二个for循环的长度从0~4减少至0~3。无法触及排好的数值 6 ,这正是我们想要的。
-----------------------------------------------------------------------------------
第一个for循环
其实理解了上面的内容,你就会明白,第一个for循环其实是用来控制下一轮的第二个for循环长度-1,因为每次第二个for循环结束,j 都会+1,也就是说第二个for循环中的 n-1-j 会越来越小。
但是,还是来看看效果如何。
------------------------------------------------------------------------------------
最后排好的结果
第一个for循环长度是0~4,当第一个for循环结束时,我们也就可以得到排好的数组了。
-------------------------------------------------------------------------------------
夹带私货
python有自带的排序函数:sort()
A = [11, 2, 5, 82, 7, 0, 4, 89, 72, 42]
A.sort()
print(A)
python牛逼!!!