煩躁,看看算法書靜靜心
import numpy as np
import random
import time
# 歸併排序
def sort_two(a,b):
n = len(a) + len(b)
a.append(np.inf)
b.append(np.inf)
c = []
for i in range(n):
if a[0] < b[0]:
elem = a.pop(0)
else:
elem = b.pop(0)
c.append(elem)
return c
def MergeSort(li):
if len(li) <= 1:
return li
middle = int(len(li)/2)
left = MergeSort(li[:middle])
right = MergeSort(li[middle:])
return sort_two(left, right)
#冒泡排序
def BubbleSort(li):
for i in range(len(li)-1):
n = 0
m = 0
for i in range(len(li)-1-n):
if li[m] > li[m+1]:
li[m], li[m+1] = li[m+1], li[m]
m += 1
n += 1
return li
#插入排序
def InsertSort(li):
for l in range(len(li)-1):
for i in range(l+1):
if li[l+1-i] > li[l-i]:
break
else:
li[l+1-i], li[l-i] = li[l-i], li[l+1-i]
return li
#快速排序
def JudgeRL(li):
if len(li) <= 1:
return li
right = []
left = []
for i in range(len(li)-1):
if li[i+1] < li[0]:
left.append(li[i+1])
else:
right.append(li[i+1])
return JudgeRL(left) + [li[0]] + JudgeRL(right)
#計數排序
def CountingSort(li):
dic = dict(zip(range(max(li)+1),(0 for i in range(max(li)+1))))
new = []
for i in li:
dic[i] += 1
for i in range(max(li)):
while dic[i] > 0:
new.append(i)
dic[i] -= 1
return new
li = [random.randint(1,10000) for i in range(10000)]
start = time.time()
li_1 = MergeSort(li)
pause = time.time()
li_2 = CountingSort(li)
end = time.time()
print('MergeSort: %f,CountingSort: %f' %(pause - start, end - pause))