Выбор Python Сортировка с различными структурами данных - PullRequest
0 голосов
/ 22 февраля 2012

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