冒泡排序(O(n^2)):
选择排序(增加一个列表,时间复杂度为O(n^3))
选择排序改进版(O(n^2))
插入排序(O(n^2))
快速排序
[toc]
冒泡排序(O(n^2)):
def bubble_sort(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
print(li)
if not exchange:
return
li=[1,2,3,4,5,7,6]
bubble_sort(li)
选择排序(增加一个列表,时间复杂度为O(n^3)):
def select_sort1(li):
li_new = []
for i in range(len(li)):
min_val=min(li)
li_new.append(min_val)
li.remove(min_val)
return li_new
li1=[3,2,34,5,6]
print(select_sort1(li1))
选择排序改进版(O(n^2)):
ef select_sort2(li):
for i in range(len(li)):
min_loc=i
for j in range (i+1,len(li)):
if li[j]<li[min_loc]:
min_loc=j
li[i],li[min_loc]=li[min_loc],li[i]
return li
li2=[1,8,96,4,55]
print(select_sort2(li2))
插入排序(O(n^2)) :
def insert_sort(li):
for i in range(1,len(li)):
tmp=li[i]
j=i-1
while li[j]>tmp and j>=0:
li[j+1]=li[j]
j-=1
li[j+1]=tmp
li=[3,2,4,1,5,47,512]
insert_sort(li)
print(li)
快速排序(O(logn):
def quick_sort(data):
if len(data) >= 2: # 递归入口及出口
mid = data[len(data) // 2] # 选取基准值,也可以选取第一个或最后一个元素
left, right = [], [] # 定义基准值左右两侧的列表
data.remove(mid) # 从原始数组中移除基准值
for num in data:
if num >= mid:
right.append(num)
else:
left.append(num)
return quick_sort(left) + [mid] + quick_sort(right)
else:
return data
print(quick_sort([random.randint(0, 100) for _ in range(10)]))