Napisałem te dwie funkcje w Pythonie które szukają k-tej najmniejszej liczby w liście (mogą być duplikaty):
def find_ksmallest1(ar, k):
ar.sort()
return ar[k-1]
def find_ksmallest2(ar, k):
af = ar[:]
for j in range(k):
smallest = af[0]
for i in af:
if i < smallest:
smallest = i
af.remove(smallest)
if j == k - 1:
return smallest
Pierwsza ma złożoność obliczeniową jak ten sort, ale mam wątpliwości co do drugiej, czy jest to O(n) bo przechodzi k razy po całej liście a k to stała i można pominąć, czy moje rozumowanie jest błędne?