我已经盯着这个问题好几天了,我被卡住了。我知道我需要使用多个堆栈和多个队列,但我无法弄清楚实现。使用数组,链接列表,堆栈和队列数据结构实现(在Python中)选择排序算法。也就是说,选择排序的输入将是数组或链表,或堆栈或数字队列,并且通过数据结构的典型函数访问这些结构中的数据
这是我的代码:
from Queue import *
from random import randint
from Stack import *
from LinkedList import *
from time import *
def ArraySort(A):
length=len(A)
for i in range (0,length-1):
minpos=i
for j in range(i+1,length):
if A[j]<A[i]:
minpos=j
temp=A[i]
A[i]=A[minpos]
A[minpos]=temp
def LinkedListSort(L,length):
A=[]
for i in range (0,length-1):
minpos=i
for j in range(i,length):
if i==0:
A[j]=L.remove(0)
else:
if A[j]<A[i]:
minpos=j
temp=A[i]
A[i]=A[minpos]
A[minpos]=temp
def StackSort(S, length):
A=[]
for i in range (0,length-1):
minpos=i
for j in range(i,length):
if i==0:
A[j]=S.pop()
else:
if A[j]<A[i]:
minpos=j
temp=A[i]
A[i]=A[minpos]
A[minpos]=temp
def QueueSort(Q, length):
length=len(Q)
A=[]
for i in range (0,length-1):
minpos=i
for j in range(i,length):
if i==0:
A[j]=Q.dequeue()
else:
if A[j]<A[i]:
minpos=j
temp=A[i]
A[i]=A[minpos]
A[minpos]=temp
def main():
for n in [10,100,500,1000,10000,100000]:
A=[]
L=LinkedList()
S=Stack()
Q=Queue()
start,end=0,0
for i in range(0,n):
r=randint(0,n)
A.append(r)
L.add(r)
S.push(r)
Q.enqueue(r)
i+=1
start=time()
ArraySort(A)
end=time()-start
print "Array: size=",n,"time=",end
LinkedListSort(L,n)
end=time()-start
print "Linked List: size=",n,"time=",end
start=time()
StackSort(S,n)
end=time()-start
print "Stack: size=",n,"time=",end
start=time()
QueueSort(Q, n)
end=time()-start
print "Queue: size=",n,"time=",end
start=time()
main()