doble_bern

导航

 

给出一个列表,进行冒泡排序

 

原理算法: 

 1 li = [52, 37, 23, 11, 3, 1, ]
 2 
 3 print(li)
 4 
 5 # 每次循环,进行一次排序,列表内数字两两比较,最大的数字排到最末尾 
 6 # 一共循环len(li) - 1 次
 7 
 8 for i in range(len(li) - 1):
 9     if li[i] > li[i + 1]:
10         temp = li[i]
11         li[i] = li[i+1]
12         li[i + 1] = temp
13 print(li)
14 
15 for i in range(len(li) - 2):
16     if li[i] > li[i + 1]:
17         temp = li[i]
18         li[i] = li[i+1]
19         li[i + 1] = temp
20 print(li)
21 
22 for i in range(len(li) - 3):
23     if li[i] > li[i + 1]:
24         temp = li[i]
25         li[i] = li[i+1]
26         li[i + 1] = temp
27 print(li)
28 
29 for i in range(len(li) - 4):
30     if li[i] > li[i + 1]:
31         temp = li[i]
32         li[i] = li[i+1]
33         li[i + 1] = temp
34 print(li)
35 
36 for i in range(len(li) - 5):
37     if li[i] > li[i + 1]:
38         temp = li[i]
39         li[i] = li[i+1]
40         li[i + 1] = temp
41 print(li)
42 
43 '''
44 输出的结果:
45 [52, 37, 23, 11, 3, 1]
46 [37, 23, 11, 3, 1, 52]
47 [23, 11, 3, 1, 37, 52]
48 [11, 3, 1, 23, 37, 52]
49 [3, 1, 11, 23, 37, 52]
50 [1, 3, 11, 23, 37, 52]
51 '''

可以看到以上排序每次步骤一致,只有一个变量(即不用对比最后一个元素)

因此,可以再设置一个变量j, 作为循环时候的变量简化操作,由此得到:

 1 li = [52, 37, 23, 11, 3, 1, ]
 2 print(li)
 3 
 4 for j in range(1, len(li)):
 5     for i in range(len(li) - j):
 6         if li[i] > li[i + 1]:
 7             temp = li[i]
 8             li[i] = li[i+1]
 9             li[i + 1] = temp
10     print(li)
11 '''
12 结果:
13 [52, 37, 23, 11, 3, 1]
14 [37, 23, 11, 3, 1, 52]
15 [23, 11, 3, 1, 37, 52]
16 [11, 3, 1, 23, 37, 52]
17 [3, 1, 11, 23, 37, 52]
18 [1, 3, 11, 23, 37, 52]
19 '''

 

posted on 2016-10-20 14:35  doble_bern  阅读(137)  评论(0编辑  收藏  举报