2012-05-01 4 views
0

Я хочу создать таблицу с определенным шагом массива, соответствующим этому конкретному времени. например:инкрементирующий массив, соответствующий времени сортировки

n  sec 
100 0.2 
200 0.4 
etc.. 

Y представляет количество попыток конкретного массива, п размер массива, приращение специфичен приращение

if sortfunction==1: 
      i=0 
      while i<y: 
       dt=0 
       for i in range(n): 
        i=i+increment 
        dt+=sort_timehelp(x,quick_sort) 
        output="%d %f\n" %(i,dt) 
        print output 

, например, если я поместить N в 1000 и приращение 100, то будет выглядеть как над таблицей выше.

прямо сейчас я получаю:

n sec 
100 0.001 
101 0.0012 
102 0.0014 

и т.д. он идет на 1 не по размеру приращения

EDIT: я получил еще один вопрос: почему это делает это в то время как цикл не проходит более раз ?

i=0 
    while i<y: 
     i=i+1 
     dt=0 
     for i in xrange(increment, n+increment, increment): 
       dt+=sort_timehelp(x, quick_sort) 
       output="%d %f\n" %(i,dt) 
       print output 

i - количество проверок массива. Почему это не идет, например, 2 раза

Редактировать: Не обращайте внимания, я использовал вместо этого цикл. У меня последний вопрос. Что делать, если у меня есть много таких выражений if, только разница - это сортировка, тогда как я могу сохранить все это в файл, так как, когда я попробую, он сохранит только последнее печатное заявление

# 
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","a") 
     fileout.write(output) 
     fileout.close() 

отступ «спасения» то же самое, как если бы sortfunction

ответ

2

диапазон (п) функция возвращает список [0,1,2, ...], которую затем цикл перебирает , Поэтому, когда i равно 0, а ваш i=i+increment, ваше значение i (100) выбрасывается и заменяется на следующий элемент списка - то есть 1.

Вы можете вместо этого попробовать for i in range(increment,n+increment,increment), а затем удалить первую строку внутри вашего для блока. Сама функция диапазона добавит increment к каждой итерации цикла - т.е. я буду 100 200 300, ..., 1000

+0

+1, я не заметил, что 'i' повторно использовался как переменная цикла, но моя понимание заключается в том, что должны быть 'n' итерации. Также неясно, как изменение способа работы 'i' повлияет на тест' i

+0

Я забыл упомянуть о части секунды. Вероятно, он либо не имеет никакого эффекта, либо вызывает бесконечный цикл, в зависимости от размера y, так как значение i будет таким же в конце цикла for независимо от того, что - 'n-1 + increment' в оригинале вопрос плаката, или n в моей версии – happydave

+0

И да, будет n итераций, но фактическое значение, возвращаемое диапазоном, используется на каждой итерации - поэтому он принимает 0 + приращение, 1 + приращение, 2 + приращение и т. д. – happydave

0
for i in xrange(increment, (n+1)*increment, increment): 
    dt+=sort_timehelp(x,quick_sort) 
    output="%d %f\n" %(i,dt) 
    print output 
Смежные вопросы