沙雕算法之猴子排序

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)
  • 总结:猴子排序,可行啊!!!

评论区 0