import numpy as np
import time as t
import matplotlib.pyplot as plt
li = [1, 2, 5, 4, 3, 9, 7, 8,12]
li2= [1, 2, 5, 4, 3, 9, 7, 8]
li = np.array(li)
li2=np.array(li2)
def isOrdered(li):
for i in range(len(li) - 1):
if li[i] < li[i + 1]:
return False
return True
def monkeySort(li):
while True:
np.random.shuffle(li)
if (isOrdered(li)):
break
return li
time_list=[]
for i in range(100):
start = t.time()
monkeySort(li)
end = t.time()
print(end - start)
time_list.append(end-start)
time_list2=[]
for i in range(100):
start = t.time()
monkeySort(li2)
end = t.time()
time_list2.append(end-start)
average=sum(time_list)/len(time_list)
time_average=[average]*len(time_list)
average2=sum(time_list2)/len(time_list)
time_average2=[average2]*len(time_list)
fig, ax = plt.subplots(figsize=(5, 2.7))
ax.plot(time_list, label='time:9')
ax.plot(time_average, label='average:9')
ax.plot(time_list2, label='time:8')
ax.plot(time_average2, label='average:8')
ax.set_xlabel('count')
ax.set_ylabel('time')
ax.set_title("the Time of Monkey sort:length %d VS %d"%(len(li),len(li2)))
ax.legend()
plt.show()
- List长度为8时:

- List长度为9时:

- 8与9的对比

- 夸张的10:

- 反思:猴子排序实际上是对n!种可能进行搜索,故对列表排序的平均时间可表示为T(1)=C\\T(n+1)=(n+1)\times T(n)
- 总结:猴子排序,可行啊!!!