码迷,mamicode.com
首页 > 编程语言 > 详细

Python——冒泡算法

时间:2017-07-30 13:57:41      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:算法   详细   分解   python   最大值   序列   排序   从后往前   需要   

冒泡算法:对于要排序的序列,每次将两个元素进行比较,如果排序错误则将两者进行交换,直到完成排序。

 
以数列 li = [12,22,3,11,8,10] 为例:

for m in range(len(li)-1):
for n in range(m+1,len(li)):
if li[m] > li[n]:
temp = li[n]
li[n] = li[m]
li[m] = temp
print li
for n in range(1,len(li)-1):
for m in range(len(li)-n):
num1 = li[m]
num2 = li[m + 1]
if num1 > num2:
temp = li[m]
li[m] = num2
li[m + 1] = temp
print li
 
两者的区别在于,前者从前往后排序,从小的值开始排序,最后排序的是大的值;
后者是从后往前排序,从大的值开始排序,最后排序的是小的值
 
以第二种方法进行详细分解
for m in range(5):
num1 = li[m]
num2 = li[m+1]
if num1 > num2:
temp = li[m]
li[m] = num2
li[m+1] = temp
print li

列表一共6个元素,需要比较5次,两两进行比较后,得到新的序列,最大的值排在最后一个。

for m in range(4):
num1 = li[m]
num2 = li[m+1]
if num1 > num2:
temp = li[m]
li[m] = num2
li[m+1] = temp
print li
再次进行循环,由于最后一个元素已经为最大值,只需要比较前5个,从而得到第二大的值。
以此类推,可以发现range中的值从len(li-1)开始依次减1,因此可以再套一层for循环。
 
for n in range(1,len(li)-1):
    #n为1,2,3,4,5
    #len(li)-n则为5,4,3,2,1
for m in range(len(li)-n):
num1 = li[m]
num2 = li[m + 1]
if num1 > num2:
temp = li[m]
li[m] = num2
li[m + 1] = temp
print li

Python——冒泡算法

标签:算法   详细   分解   python   最大值   序列   排序   从后往前   需要   

原文地址:http://www.cnblogs.com/zhaoxiaoyu/p/7258525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!