在python中排序模式算法

时间:2012-05-01 01:17:00

标签: python

我要做的是提示用户输入排序函数类型,排序模式,数组大小,数组增量大小和测试次数。然后我希望它保存它。但是,这个程序存在几个问题。

  1. 不知怎的,当我选择随机模式时,它给了我一些奇怪的答案,如:

    1543 0.002

    600 0.020

    1400 0.08

  2. 它不是真正的订单。我认为for循环有问题。

    def rand_array(n):
    ''' returns sorted array of integers of size n'''
        R=[randint(1, 1000*n) for i in xrange(n)]
        return R
    
    def sorted_array(n):
        ''' returns a sorted array of n integers'''
        return [i for i in xrange(1,n+1)]
    
    def rev_array(n):
        '''returns an array of n integers in reverse order'''
        R= [i for i in reversed(xrange(1,n+1))]
        return R
    
     def sort_timehelp(x,f):
        ''' This times the quick sort algorithm as it must take 3 variables'''
        high=len(x)
        low=0
        t0=clock()
        f(x,low,high)
        t1=clock()
        dt=t1-t0
        return dt
    
    def main():
        myinfo()
        info()
        while True:
            print '==================== to quit enter Control-c=================='
            sortfunction=input("Choose a sort function: ")
            s=input("Choose a pattern: ")
            n=input("Array Size: ")
            increment=input("Increment size: ")
            y=input("Number of tests: ")
    
            if s == 1:
                x=rand_array(n)
            elif s ==2:
                x= sorted_array(n)
            elif s==3:
                x=rev_array(n)
            if sortfunction==1:
                i=0
                output="algorith: quick sort \n input data: %s" %s
                print output
                while i<y:
                    i=i+1
                    ff=0.0
                    array=x[increment-1:n:increment]
                    for my in array:
                        ff+=sort_timehelp(x,quick_sort)
                        output="%d\t %f" %(my, ff)
                        print output
    
              saving=input("You want to save data ? type 0 to continue or 1 to save " )
    
              if saving == 0:
                  continue
              if saving == 1:
                  ask=raw_input("Type the name file: ")
                  fileout=open(ask+".csv","w")
                  fileout.write(output)
                  fileout.close()
    

    第二个问题是,当我尝试保存数据时,它只保存最后的数据,但我想保存所有内容。

    我将不胜感激。

    编辑: 定时函数采用数组和排序算法 我想通过增量和相应的时间来保存数字。 (那就是我的for循环)

2 个答案:

答案 0 :(得分:3)

您的随机模式实际上是一个随机模式,而不是文档字符串建议的排序列表。

要保存所有内容,请打开输出文件以进行追加,而不仅仅是写入(正如您所发现的那样,会覆盖以前的内容)。也就是说,使用“a”而不是“w”。

答案 1 :(得分:0)

有很多问题。让我们来看看......

def rand_array(n):
''' returns sorted array of integers of size n'''
    R=[randint(1, 1000*n) for i in xrange(n)]
    return R

这不会返回随机数的排序数组。它返回从连续较大的域中选择的随机整数列表。你可能想要:

def rand_array(n):
''' returns sorted array of integers of size n'''
    return sorted([randint(1, 1000) for i in xrange(n)])

def sorted_array(n):
    ''' returns a sorted array of n integers'''
    return [i for i in xrange(1,n+1)]

这应该只是:

def sorted_array(n):
    ''' returns a sorted array of n integers'''
    return range(1, n + 1)

def rev_array(n):
    '''returns an array of n integers in reverse order'''
    R= [i for i in reversed(xrange(1,n+1))]
    return R

简单地说:

def rev_array(n):
    '''returns an array of n integers in reverse order'''
    return reversed(sorted_array(n))

            i=0
            output="algorith: quick sort \n input data: %s" %s
            print output
            while i<y:
                i=i+1
                ff=0.0
                array=x[increment-1:n:increment]
                for my in array:
                    ff+=sort_timehelp(x,quick_sort)
                    output="%d\t %f" %(my, ff)
                    print output

所以你要排序多次(在内循环中),因为你有数组元素?不知道为什么。无论如何,i的商家应该只使用for循环来完成:

            print "algorith: quick sort \n input data: %s" %s
            for i in range(y):
                ff = 0.0
                array = x[increment-1:n:increment]
                for my in array:
                    ff += sort_timehelp(x, quick_sort)
                    output = "%d\t %f" %(my, ff)
                    print output

          saving=input("You want to save data ? type 0 to continue or 1 to save " )

          if saving == 0:
              continue
          if saving == 1:
              ask=raw_input("Type the name file: ")
              fileout=open(ask+".csv","w")
              fileout.write(output)
              fileout.close()

可以删除if saving==0子句;除saving之外的任何1值都将跳过保存。

正如斯科特所指出的那样,"a"中需要"w"而不是open。您可以做的另一件事是将openclose移出循环。您可能还想使用内置的Python csv模块。