Python选择按不同的数据结构排序

时间:2012-02-21 22:41:47

标签: python sorting data-structures

我已经盯着这个问题好几天了,我被卡住了。我知道我需要使用多个堆栈和多个队列,但我无法弄清楚实现。使用数组,链接列表,堆栈和队列数据结构实现(在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()

0 个答案:

没有答案