冒泡算法

先理解a=123,b=321,两个互换的方法和思路,其实就是找个中间变量存放其值
>>> a=123
>>> b=321
>>> tmp=a
>>> a=b
>>> b=tmp
>>> a,b
(321, 123)
 
 
 
li = [13,22,6,99,11]
 
请按照一下规则计算:
13 和 22 比较,将大的值放在右侧,即:[13, 22, 6, 99, 11]
22 和 6 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
22 和 99 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
99 和 11 比较,将大的值放在右侧,即:[13, 6, 22, 11, 99]
......
13 和 6 比较,将大的值放在右侧,即:[6, 13, 22, 11, 99,]
 
---------------------------------------------------------
---------------------------------------------------------
---------------------------------------------------------
第一步:
li = [13, 22, 6, 99, 11]
for m in range(4): # 等价于 #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
 
第二步:
li = [13, 22, 6, 99, 11]
for m in range(4): # 等价于 #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(3): # 等价于 #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(2): # 等价于 #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(1): # 等价于 #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 = [13, 22, 6, 99, 11]
for i in range(1,5):
for m in range(len(li)-i):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp


实际代码:
import random
import time

def bubble_sort(array):
for i in range(len(array)):
for j in range(len(array)-1-i,):
if array[j] > array[j+1]:
tmp = array[j]
array[j] = array[j+1]
array[j+1] = tmp


if __name__ == '__main__':
array = []
for i in range(20000):
array.append(random.randrange(100000))

time_start = time.time()
bubble_sort(array)
time_end = time.time()



print (array)
print ("cost:",time_end-time_start)

#冒泡算法:4.35s(5000个数字),17.60(10000个数字),70(20000个数字)
posted @ 2018-04-25 09:51  Paco_Pig  阅读(139)  评论(0)    收藏  举报