您的位置:首页 > 其它

算法之冒泡排序

2016-05-22 09:36 447 查看

什么是冒泡排序

冒泡排序是排序中经典排序之一,它利用相邻元素比较并进行位置的互换,让元素按照从小到大的顺序排列。

原理解释:

相邻的两个元素比较,如果如果元素1大于元素2则元素1与元素二的位置互换。怎么进行位置互换呢?把元素1先定义到额外的变量里面,让元素1与元素2进行互换,如果互换完成了。再把互换后的元素1也就是现在的元素2,重新定义回原来的变量,这样就实现了互换。



单元素比较

li = [11, 9, 10, 1]
for m in range(len(li)-1):    #确定循环的次数-1是因为从0开始的
if li[m] > li[m+1]:    #相邻的元素比较
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
print(li)


冒泡排序的基本比较方式已经有了,现在进一步解析冒泡排序的原理

需求:

将所有元素按照从小到大的顺序排列

li = [11, 9, 10, 1]
for m in range(len(li)-1):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp


已经把最大的数字移动到最后个元素位了,下面把第二大的移动到倒数第二位元素

for m in range(len(li)-2):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp


依次类推,继续操作:

for m in range(len(li)-3):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
for m in range(len(li)-3):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp


for m in range(len(li)-4):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
print(li)


因为列表li的字符一共有4个元素,-3就已经到了最前面两个字符做比较了,这样就不用继续下去了。

上面繁琐重复的代码可以达到我们预期的效果,那么能不能运用for循环的方式,精简代码达到同样的目的呢?

li = [11, 9, 10, 1]
for m in range(1, len(li)):
for i in range(len(li) - m):
if li[i] > li[i + 1]:
temp = li[i+1]
li[i+1] = li[i]
li[i] = temp
print(li)
[1, 9, 10, 11]


最终我们得到以上语句,到此冒泡排序就已经出来了。

注意:

len(li) 如果只查看位数的话,是占4位;如果进行for循环位数的话是用0开始循环。

两个for循环的关系有点复杂,第一个for循环得出来的是li的位数,其实最重要的是第二个for循环,第二次for循环完成的时候,就已经完成了一次排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  冒泡排序 算法