Это не может быть трудно реализовать свой собственный список сортировки на Python.Ниже приводится доказательство концепции:
import bisect
class sortlist:
def __init__(self, list):
self.list = list
self.sort()
def sort(self):
l = []
for i in range(len(self.list)):
bisect.insort(l, self.list[i])
self.list = l
self.len = i
def insert(self, value):
bisect.insort(self.list, value)
self.len += 1
def show(self):
print self.list
def search(self,value):
left = bisect.bisect_left(self.list, value)
if abs(self.list[min([left,self.len-1])] - value) >= abs(self.list[left-1] - value):
return self.list[left-1]
else:
return self.list[left]
list = [101, 3, 10, 14, 23, 86, 44, 45, 45, 50, 66, 95, 17, 77, 79, 84, 85, 91, 73]
slist = sortlist(list)
slist.show()
slist.insert(99)
slist.show()
print slist.search(100000000)
print slist.search(0)
print slist.search(56.7)
========= Результаты ============
[3, 10, 14, 17, 23 , 44, 45, 45, 50, 66, 73, 77, 79, 84, 85, 86, 91, 95, 101]
[3, 10, 14, 17, 23, 44, 45, 45, 50, 66, 73, 77, 79, 84, 85, 86, 91, 95, 99, 101]
'memcpy' по-прежнему работает * O (n) *. Я не уверен, как Python реализует списки * точно *, но моя ставка будет заключаться в том, что они хранятся в непрерывной памяти (конечно, не как связанный список). Если это действительно так, вставка с использованием 'bisect', которую вы продемонстрируете, будет иметь сложность * O (n) *. – Stephan202
... и затем этот пример не был;) – Stephan202
@ stephan202: Извините, я думал, что он заслуживает самого себя, как совершенно отдельный вопрос! –