中cmd_Dockerfile中CMD和ENTRYPOINT的區別
阿新 • • 發佈:2021-01-15
氣泡排序
def maopao(array):
for i in range(len(array)):
for j in range(len(array) - i - 1):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j]
return array
選擇排序
def xuanze(array):
for i, num in enumerate(array) :
min_index = i
for j in range(i + 1, len(array)):
if array[min_index] > array[j]:
min_index = j
if min_index != i:
array[i], array[min_index] = array[min_index], array[i]
return array
插入排序
def charu(array):
result = []
for index, num in enumerate(array):
for i in range(index):
if result[i] > num:
result.insert(i, num)
break
else:
result.append(num)
return result
希爾排序
def shell(array):
length = len(array) // 2
while length != 1:
array = charu_tap(array, length)
length = length // 2
else:
return charu_tap(array, length)
def charu_tap(array, tap):
result = []
for index, num in enumerate(array):
if index // tap >= 1:
strat = index % tap
for i in range(strat, index, tap):
if result[i] > num:
result.append(num)
result[i], result[index] = result[index], result[i]
break
else:
result.append(num)
else:
result.append(num)
return result
歸併排序
def merge_sort(lst, fx=True):
if len(lst) <= 1:
# 當列表元素只有一個的時候,直接返回
return lst
mid = len(lst) // 2
left = lst[:mid]
right = lst[mid:]
starttime = time.time()
left = merge_sort(left, not fx)
right = merge_sort(right, not fx)
# 遞迴的進行排序
result = []
while left and right:
if (left[-1] < right[-1]) == fx:
result.append(left.pop())
else:
result.append(right.pop())
if left:
if fx and len(left) == 1:
result.extend(left)
else:
left.reverse()
result.extend(left)
if right:
if fx and len(right) == 1:
result.extend(right)
else:
right.reverse()
result.extend(right)
return result
# 返回排序後的結果
效率測試程式碼
# 生成 10W資料
list_num = [i * random.random() for i in range(100000)]
# 打亂順序
random.shuffle(list_num)
# 測試程式碼:歸併測試
t5 = timeit.Timer("merge_sort(list_num,False)", "from __main__ import merge_sort,list_num")
# 測試次數 10次
print("test5", t5.timeit(number=10), "milliseconds")