Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的排序模式算法_Python - Fatal编程技术网

python中的排序模式算法

python中的排序模式算法,python,Python,我试图做的是提示用户输入排序函数类型、排序模式、数组大小、数组增量大小和测试次数。那我要它来保存它。然而,这个程序有几个问题 不知何故,当我选择随机模式时,它会给我一些奇怪的答案,比如: 15430.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 x

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

  • 不知何故,当我选择随机模式时,它会给我一些奇怪的答案,比如:

    15430.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()
    
    def rand_数组(n):
    ''返回大小为n''的整数排序数组'
    R=[randint(11000*n)表示x范围内的i(n)]
    返回R
    def排序_阵列(n):
    ''返回n个整数的排序数组''
    返回[i代表xrange(1,n+1)中的i]
    def rev_阵列(n):
    ''返回一个由n个整数组成的数组,顺序与''
    R=[i代表反向中的i(x范围(1,n+1))]
    返回R
    def sort_时间帮助(x,f):
    ''这乘以快速排序算法,因为它必须包含3个变量''
    高=透镜(x)
    低=0
    t0=时钟()
    f(x,低,高)
    t1=时钟()
    dt=t1-t0
    返回dt
    def main():
    myinfo()
    信息()
    尽管如此:
    打印“=============================================要退出enter Control-c===================================='
    sortfunction=input(“选择排序函数:”)
    s=输入(“选择模式:”)
    n=输入(“数组大小:”)
    增量=输入(“增量大小:”)
    y=输入(“测试次数:”)
    如果s==1:
    x=随机数组(n)
    elif s==2:
    x=排序的数组(n)
    elif s==3:
    x=rev_阵列(n)
    如果sortfunction==1:
    i=0
    output=“algorith:快速排序\n输入数据:%s”%s
    打印输出
    
    而我您的随机模式实际上是一个随机模式,而不是docstring建议的排序列表


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

    有很多问题。让我们看一下

    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 range(1, n + 1)
    

    简单地说:

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


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


    正如Scott指出的,在
    打开
    中,您需要
    的“a”
    而不是
    的“w”
    。您可以做的另一件事是将
    打开
    关闭
    移出循环。您可能还想使用内置的Python
    csv
    模块。

    一些注释:1)为什么要将两个参数传递给排序函数
    sortfun(x,n)
    ?2) 您的文档字符串实际上并不描述您的函数。3) 当您说要保存所有内容时,您的意思是在
    的每个分支中,而True
    或变量
    output
    的每个实例中?output=“%d\t%f”%(my,ff)print output”后面的行没有正确缩进。缩进是正确的。此外,您描述的输出为什么奇怪?我们无法知道什么是奇怪的或不奇怪的,特别是因为这段代码没有按照发布的方式运行。@M W,当你声称缩进是正确的,而它们显然不是,你就失去了可信度。
    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
    
                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()