Я смотрел на эту проблему уже несколько дней и застрял. Я знаю, что мне нужно использовать несколько стеков и несколько очередей, но я просто не могу понять реализацию. Реализуйте (в 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()