我制作了一个脚本来测试我编写的不同排序算法的运行时间。代码在这里:
import random
import sort
import time
print ('test sort functions for integer lists')
integers = [random.randint(1,999) for n in range(1, random.randint(1000,2000)) ]
print('ordering', len(integers), 'ints')
print('start selection sort')
ts=time.clock()
print(sort.selection(integers))
print ('end selection sort with time', time.clock()-ts, '\n')
print('start merge sort')
tm=time.clock()
print(sort.merge(integers))
print ('end merge sort with time', time.clock()-tm, '\n')
调用函数sort.merge(integers)
时,由于某种原因会传递一个空列表。我通过放置print(integers)
来测试这一点,但据我所知,应该与传递给sort.selection(integers)
的列表完全相同。有人知道发生了什么事吗?
我的sort.py模块的内容:
import math
def merge(ints):
if (len(ints) < 2):
return (ints)
else:
print('recursion')
i=merge(ints[0:math.ceil(len(ints)/2)]) #calls recursive function for
j=merge(ints[math.ceil(len(ints)/2):]) #both halves of list
k=[] #beginning of merge algorithm
ic=0
jc=0
while (ic < len(i) and jc < len(j)): #repeat as long as end of i
if (i[ic] < j[jc]): #append lowest value to k
k.append(i[ic])
ic+=1 #track which values of i are accounted for
if (ic == len(i)): #if i is exhausted
for a in range (jc, len(j)): #fill k with j
k.append(j[jc])
jc+=1
break
if (i[ic] >= j[jc]):
k.append(j[jc])
jc+=1
if (jc == len(j)):
for a in range (ic, len(i)):
k.append(i[ic])
ic+=1
break
return (k)
def selection(ints,order='a'):
maxint=0
orderedints=[]
if (order == 'desc' or order == 'descending' or order == 'd'):
while (len(ints) > 0):
maxint=maxof(ints)
ints.remove(maxint)
orderedints.append(maxint)
return (orderedints)
if (order == 'asc' or order == 'ascending' or order == 'a'):
while (len(ints) > 0):
minint=maxof(ints)
for i in range (0, len(ints)):
if (ints[i] < minint):
minint = ints[i]
ints.remove(minint)
orderedints.append(minint)
return (orderedints)
def maxof(a):
maxint=0
for i in range (0, len(a)):
if (a[i] > maxint):
maxint = a[i]
return (maxint)
答案 0 :(得分:1)
在require('./public/style.scss')
内,您正在呼叫sort.selection
。由于ints.remove
只是对ints
引用的列表的另一个引用(不是副本),integers
的副作用是在返回时清空输入列表它的分类副本。
答案 1 :(得分:1)
您的函数sort.selection
正在修改列表,如下所示:
ints.remove(maxint)
如果要对列表的本地副本进行操作,请添加:
ints = ints[:]
早期sort.selection()
例行程序。
答案 2 :(得分:0)
问题是sort.selection
从它获取的列表中删除了值作为其参数。由于它返回新列表,您需要将该列表分配回变量。
更改此部分:
print(sort.selection(integers))
为:
integers = sort.selection(integers)
print(integers)