-3

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

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

    1543 0.002

    600 0.020

    1400 0.08

它不是真正的顺序。我认为 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 循环)

4

2 回答 2

3

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

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

于 2012-05-01T01:30:54.020 回答
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"in open。您可以做的另一件事是将循环移出openclose移出。您可能还想使用内置的 Pythoncsv模块。

于 2012-05-01T01:54:42.873 回答