import time
import random
#卡牌排序适用链表节点
class Node:
def __init__(self,x=None):
self.val=x
self.next_node=None
#卡牌排序适用链表
class LinkList:
def __init__(self):
self.head=None
def list_print(self):
node=self.head
while node is not None:
print(node.val,end=' ')
node=node.next_node
print()
#卡牌插入
def insert(self,x):
h=self.head
node=self.head
p=node.next_node
#链表不止一个节点
while p is not None:
if x<node.val:
self.head=Node(x)
self.head.next_node=h
# self.list_print()
return
if x>=node.val and x<=p.val:
node.next_node=Node(x)
node.next_node.next_node=p
# self.list_print()
return
else:
node=node.next_node
p=node.next_node
#链表只有一个节点
if x>node.val:
node.next_node=Node(x)
else:
self.head=Node(x)
self.head.next_node=h
return
def randNum(l,n):
for i in range(n):
l.append(random.randint(0,1000))
cards=[]
randNum(cards,10000)
#卡牌排序
def card_sort(cards):
ll=LinkList()
ll.head=Node(cards[0])
for i in range(1,len(cards)):
ll.insert(cards[i])
# return ll.list_print()
#冒泡排序
def mp_sort(cards):
for i in range(len(cards)):
for j in range(i):
if cards[i]<cards[j]:
tmp=cards[i]
cards[i]=cards[j]
cards[j]=tmp
pass
# print(cards)
t0=time.time()
mp_sort(cards)
t1=time.time()
print(t1-t0)
card_sort(cards)
t2=time.time()
print(t2-t1)
跟插入排序差不多,之所以称之为卡牌排序,是因为其原理跟我平时对扑克牌进行整理排序的原理一样,不过可笑的是:花了一早上写出来的算法的运行效率竟然还比不上朴实无华的冒泡排序,心酸。。。