Python алгоритъм тайминг
Здравейте, сега уча два курса едновременно. Python и алгоритми. Започнах сам да решавам алгоритмите. След като достигна до решение, сравнявам кода. Сега правя Bubble Sort и се натъкнах се на нещо любопитно:
Първото решения е моя код, който не е оптимизиран. Винаги върти от първия до последния елемент в масива. Тоест, дори масива да е вече сортиран, винаги прави максималните обхождания. Тайминга е 1.4 - 1.8 мс.
Второто решение е от интернет. Тайминга е 6.5 - 8.2 мс. Приблизително 5 -6 пъти по бавно.
Третото решение е моят код с оптимизация за вече сортиран масив. Тайминга е почти същия, като този на решение 2.
Въпросът ми е: Дали забавянето идва от инициализацията на булева стойност. И след като тайминга е един от основните критерии за един алгоритъм, не е ли това немислимо(5 -6 пъти по- бавно изпълнение)?
import time def bubble_sort(array): for i in range(0, len(array) - 1): for j in range(0, len(array) - 1): temp = j + 1 if array[temp] < array[j]: array[j], array[temp] = array[temp], array[j] # def bubble_sort(array): # arr_sorted = False # while not arr_sorted: # arr_sorted = True # for i in range(0, len(array) - 1): # if array[i] > array[i + 1]: # arr_sorted = False # array[i], array[i + 1] = array[i + 1], array[i] # def bubble_sort(array): # arr_sorted = True # for i in range(0, len(array) - 1): # for j in range(0, len(array) - 1): # temp = j + 1 # if array[temp] < array[j]: # arr_sorted = False # array[j], array[temp] = array[temp], array[j] # if arr_sorted: # break array_list = [17, 20, 26, 31, 44, 54, 55, 77, 93] start_time = time.clock() bubble_sort(array_list) print(time.clock() - start_time, "seconds") print(array_list)
П.С
Поправям се. Забавянето идва от масива. Сортирания масив е по бавен от несортирания...
array_list = [54, 26, 93, 17, 77, 31, 44, 55, 20]