冒泡算法

3   1         3  1        3     1         3    20       3     20         3    20

2  10        2  10       2   20        2     1         2     10         2     10

1   5         1   20      1    10       1      10       1      1          1      5

0   20       0   5       0    5          0      5        0     5           0     1

 

加入有四个数字,排列位置分别为0,1,2,3,冒泡算法是先比较0和1,大大放在位置1,小的放到0.然后再比较位置1和2,同样大的放2,小的放1,以此类推,得到最大值放到最顶部,然后不停以此循环,得到一个依此从大到小的排列。

li = [88, 100, 66,600, 5555,333,2,1,22,55, 33, 22,1999]
 
for a in range(len(li)):
  for i in range(len(li)-1):

  

#因为nex是+1的,最后一个nex会超过len长度一个,所以len先-1。这个for循环执行一遍冒泡排序找出最大值,上层for循环执行多次冒泡找出第二大、第三大...
    
cur = li[i]
nex = li[i+1]

if cur < nex:
    temp = cur
    li[i] = nex
    li[i+1] = temp
print(li)
[5555, 1999, 600, 333, 100, 88, 66, 55, 33, 22, 22, 2, 1]

  

 
上面是自己的做法,更标准的做法如下:
li = [88, 100, 66,600,9999995555,333,2,1,22,55, 33, 22,1999]

for a in range(1,len(li)):
  for i in range(len(li)-a): a每次减1,就是让最后得到的最大或最小值(取决于> or <)不参与下次循环比较
    cur = li[i]
    nex = li[i+1]
    if cur > nex:
      temp = cur
      li[i] = nex
      li[i+1] = temp

print(li)

  

 

posted @ 2018-06-21 16:45  greenfan  阅读(125)  评论(0)    收藏  举报