排序
1、冒泡排序
冒泡算法
import random # 随机模块 def bubble_sort(li): ###################################冒泡排序##################################### for i in range(len(li)-1): # 多少趟 for j in range(len(li)-i-1): #一趟里多少次 if li[j]>li[j+1]: # 升序排列 " < " 为降序排列 li[j],li[j+1]=li[j+1],li[j] # 互换数 data=list(range(1000)) # 1000个数 random.shuffle(data) # 打乱这个序列 bubble_sort(data) # 将打乱后的序列传送到冒泡算法函数 print(data) # 打印排序后的序列
打印后的效果为:
``````````````````````
改进后的冒泡算法:
import random def bubble_sort_1(li): # 上个算法的改进,用于极端情况,例如已经拍好的序列 for i in range(len(li)-1): exchange=False for j in range(len(li)-i-1): if li[j]>li[j+1]: li[j],li[j+1]=li[j+1],li[j] exchange=True if not exchange: # 如果没有交换就直接退出 break data=list(range(1000)) random.shuffle(data) bubble_sort_1(data) print(data)
改进前和改进后的冒泡算法进行对比:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
import random # 随机模块 import time def cal_time(func): # 装饰器 ,用来检测算法所执行的时间 def wrapper(*args,**kwargs): t1=time.time() result=func(*args,**kwargs) t2=time.time() print("%s running time: %s secs." %(func.__name__,t2-t1)) return result return wrapper @cal_time def bubble_sort(li): ###################################冒泡排序##################################### for i in range(len(li)-1): # 多少趟 for j in range(len(li)-i-1): #一趟里多少次 if li[j]>li[j+1]: # 升序排列 " < " 为降序排列 li[j],li[j+1]=li[j+1],li[j] # 互换数 # data=list(range(1000)) # 1000个数 # random.shuffle(data) # 打乱这个序列 # bubble_sort(data) # 将打乱后的序列传送到冒泡算法函数 # print(data) # 打印排序后的序列 @cal_time def bubble_sort_1(li): # 上个算法的改进,用于极端情况,例如已经拍好的序列 for i in range(len(li)-1): exchange=False for j in range(len(li)-i-1): if li[j]>li[j+1]: li[j],li[j+1]=li[j+1],li[j] exchange=True if not exchange: break data=list(range(1000)) random.shuffle(data) bubble_sort(data) bubble_sort_1(data) print(data)
打印后的效果为
``````````````````````