python算法-冒泡排序

核心算法:

在数组x[n]中,从第一个数开始,拿x[i]和后面的数x[i+1]进行比较,如果x[i]比后面的大,就交换两个数的位置,这样遍历一遍数组后,把最大的数据排在了最后面,之后继续循环排剩下的n-1个数,

直到完成所有的排序,由于每次都是把最大的排到最后面,就好像冒泡一样,故取名冒泡排序。

详细讲解:

里层for循环的逻辑:

第一步:从第一个元素开始,与第二个元素比较,如果小于,则交换两个元素的位置,否则不交换位置。

第二步:从第二个元素和第三个元素比较,如果小于,则交换两个元素的位置,否则不交换位置。

类似第一步和第二步的过程,实现第三元素和第四元素比较、第四元素和第五元素比较。。。。。

第N步:倒数第二个元素和最后一个比较。

全部比较之后,整个列表中最大的元素就找到了。

外层for循环的逻辑:

第一步到第N步

然后,重复第一步到N-1步的过程,可以找到第二大的数字

然后,重复第一步到N-2步的过程,可以找到第三大的数字

然后,重复第一步到N-3步的过程,可以找到第四大的数字

。。。。。。。

最后,重复第一步的过程(即:N-(N-2)),找到第N-1大的数字

代码示例如下:

s=[4,3,1,9,10,6,2,7,5,8] 
for i in range(len(s)-1):
for j in range(len(s)-1-i):
if s[j]>s[j+1]:
s[j],s[j+1]=s[j+1],s[j]
print(s)

代码思路:
# 第一次循环结果:[3, 1, 4, 9, 6, 2, 7, 5, 8, 10],找到最大的数字
# 第二次循环结果:[1, 3, 4, 6, 2, 7, 5, 8, 9, 10],找到第二大的数字
# 第三次循环结果:[1, 3, 4, 2, 6, 5, 7, 8, 9, 10],找到第三大的数字
# 第四次循环结果:[1, 3, 2, 4, 5, 6, 7, 8, 9, 10],找到第四大的数字
# 第五次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第五大的数字
# 第六次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第六大的数字
# 第七次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第七大的数字
# 第八次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第八大的数字
# 第九次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到最小的数字
从以上解析过程可以看到,在循环第5次后列表数字已排好序

 
原文地址:https://www.cnblogs.com/ssj0723/p/9516472.html