我要做的是提示用户输入排序函数类型,排序模式,数组大小,数组增量大小和测试次数。然后我希望它保存它。但是,这个程序存在几个问题。
不知怎的,当我选择随机模式时,它给了我一些奇怪的答案,如:
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循环)
答案 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
。您可以做的另一件事是将open
和close
移出循环。您可能还想使用内置的Python csv
模块。