数据结构与算法
1.平方时间复杂度
----选择排序
def select_sort(items):
"""简单选择排序"""
# items = items[:]
for i in range(len(items) - 1):
min_index = i
for j in range(i + 1, len(items)):
if items[min_index]>items[j]:
min_index = j
items[i], items[min_index] = items[min_index], items[i]
return items
a=[54,74,32,42,27,7,5]
print(select_sort(a))
#output:[5, 7, 27, 32, 42, 54, 74]
----冒泡排序
每次循环,两两比较,最大的数会逐渐上浮到末尾
def bubble_sort(items):
"""冒泡排序"""
for i in range(1,len(items)):#i从1开始到n-1
is_sorted=True #每一次比较开始都设置is_sorted为true,只要交换次序了就说明还没排好序
for j in range(len(items)-i):
if items[j]>items[j+1]:
items[j],items[j+1]=items[j+1],items[j]
is_sorted=False
if is_sorted==True:
break
#当一轮循环过后,isSorted 还是 true,说明此时数组已经排好序了,退出循环即可。
return items
a=[54,74,32,42,27,5,97]
print(bubble_sort(a))
#output:[5, 27, 32, 42, 54, 74, 97]
----搅拌排序(冒泡排序升级版)
双向冒泡排序:奇次循环从头开始两两比较大的下沉,偶次循环从末尾开始两两比较小的上浮。
def bubble_sort(items):
"""搅拌排序(冒泡排序升级版)"""
for i in range(len(items)-1):
exchange_sorted=False
for j in range(len(items)-i-1): #大的上浮
if items[j]>items[j+1]:
items[j],items[j+1]=items[j+1],items[j]
exchange_sorted=True
#print(items)
if exchange_sorted==True:
exchange_sorted = False
for j in range(len(items)-i-1,i,-1): #倒过来比较,小的下沉
if items[j-1]>items[j]:
items[j],items[j-1]=items[j-1],items[j]
exchange_sorted = True
# print(items)