Có thể không khó để thực hiện danh sách sắp xếp của riêng bạn trên Python. Dưới đây là một bằng chứng về khái niệm:
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)
========= Kết quả ============
[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]
101
3
50
memcpy
vẫn là một hoạt động O (n) . Tôi không chắc chắn làm thế nào Python thực hiện danh sách chính xác , nhưng đặt cược của tôi sẽ là chúng được lưu trữ trong bộ nhớ liền kề (chắc chắn không phải là một danh sách được liên kết). Nếu đó thực sự là như vậy, việc chèn sử dụngbisect
mà bạn chứng minh sẽ có độ phức tạp O (n) .