Python- функция быстрого выбора нахождения медианы
Итак, я разработал код для функции быстрого выбора, но он не печатает медиану. У меня есть приглашение основной функции для имени файла и затем импортирую этот текстовый файл, разделив его на список цифр, это текстовый файл:
Offices 70
MedicalOffice 120
PostOffice 170
Mall 200
Он импортируется в список:
L = ['70', '120', '170', '200']
когда он проходит через функцию быстрого выбора, он выводит истекшее время, являющееся нечетным числом, которое меняется каждый раз, когда что-то вроде 1.9083486328125e-06... сначала, какое значение времени это в миллисекундах? и когда функция запускается и возвращает стержень, она выплевывает это:
>>> 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))
1 ответ
time()
Метод возвращает прошедшие секунды с начала эпохи в виде числа с плавающей запятой. Чтобы распечатать истекшее время в секундах от определенного времени начала, вам нужно установить start_time = time.time()
, Тогда вы можете взять разницу time.time() - start_time
чтобы получить истекшее время в секундах.
Что касается того, почему ваша функция не выводит медиану, я бы сначала убедился, что вы передаете quickSelect
список целых чисел. Прямо сейчас кажется, что вы передаете список строк, поэтому ваши сравнения в quickSelect
между парами строк вместо целых чисел. Попробуйте использовать
L.append( int(locations) )