added `sorted_insert.py`
parent
d3c2184af8
commit
caf780f785
|
@ -0,0 +1,34 @@
|
||||||
|
"""
|
||||||
|
Algorithm Type : Array Insertion
|
||||||
|
Time Complexity : O(log n)
|
||||||
|
Space Complexity : O(1)
|
||||||
|
"""
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
|
def sortedIndex(a: list, item):
|
||||||
|
start = 0
|
||||||
|
end = len(a)
|
||||||
|
depth = math.log(len(a) + 1, 2) # the depth of the binary tree
|
||||||
|
i = 0
|
||||||
|
while i <= math.ceil(depth): # iterative binary search
|
||||||
|
mid = (start + end) // 2
|
||||||
|
if start >= end:
|
||||||
|
break
|
||||||
|
if item == a[mid]:
|
||||||
|
return mid # returns the index of the duplicate element
|
||||||
|
elif item > a[mid]:
|
||||||
|
start = mid + 1
|
||||||
|
else:
|
||||||
|
end = mid
|
||||||
|
i += 1
|
||||||
|
return mid # returns the insertion position for new element
|
||||||
|
|
||||||
|
def sortedInsert(a: list, item):
|
||||||
|
a.insert(sortedIndex(a, item), item)
|
||||||
|
return a
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(sortedIndex(['a', 'b', 'c', 'd'], 'b')) # 1
|
||||||
|
print(sortedIndex([0, 1, 2, 3], 1.5)) # 2
|
||||||
|
print(sortedInsert([0, 1, 2, 3], 1.5)) # [0, 1, 1.5, 2, 3]
|
Loading…
Reference in New Issue