list - python Quickselect函数查找中间值

  显示原文与译文双语对照的内容
85 0

所以我开发了一个快速选择函数的代码,但它似乎没有打印出中值。 我有一个文件名的主函数提示,然后导入那个txt文件,将它拆分成一列数字,这是 txt file: 。


Offices 70
MedicalOffice 120
PostOffice 170
Mall 200

它被导入到一个列表中:


L = ['70', '120', '170', '200']

当它通过quickselect函数运行时,它将输出一个奇数,每次像 1.908 3486328125e-06一样变化的奇数。 首先,时间的值是多少毫秒? 当函数运行并返回 pivot 时,它将输出:


>>> main()
Enter a filename: Input.txt
['70', '120', '170', '200']
Time: 1.9073486328125e-06
200

谁能告诉我为什么不能工作? 下面是代码:


import time

start_time = 0

def quickSelect(L, k):
 start_time = time.time() 
 if len(L)!= 0:
 pivot = L[(len(L)//2)]
 smallerList = []
 for i in L:
 if i<pivot:
 smallerList.append(i)
 largerList=[]
 for i in L:
 if i>pivot:
 largerList.append(i)
 m=len(smallerList)
 count=len(L)-len(smallerList)-len(largerList)
 if k> = m and k <m + count:
 end_time = time.time()
 print("Time:", end_time - start_time)
 return pivot
 elif m> k:
 return quickSelect(smallerList, k)
 else:
 return quickSelect(largerList, k - m - count)
def main():

 dataFilename = input('Enter a filename: ')

 dataFile = open(dataFilename)
 L = []
 for inputLine in dataFile:
 splittext = inputLine.split()
 place = splittext[0]
 locations = splittext[1]
 L += [locations]
 print(L)
 print(quickSelect(L, len(L)//2)) 

时间: 原作者:

114 4

time() 方法将纪元自纪元以来所经过的秒数返回为 float 。 为了以秒为单位,从特定的开始时间print打印出经过的时间,你需要设置。 然后,你可以使用 time.time() - start_time的差异以秒为单位获得经过的时间。

为了为什么你的函数没有输出中值,我首先要确保你正在传递一个整数列表。 现在,你正在传递一个字符串列表,所以你在 quickSelect 中的比较是在字符串对之间,而不是整数。 尝试使用


L.append( int(locations) )

原作者:
...