mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-29 20:26:07 -04:00
more typos! 😓
This commit is contained in:
parent
56ad845ccc
commit
bc442a0727
Binary file not shown.
@ -3,53 +3,63 @@
|
||||
__author__ = "bt3"
|
||||
|
||||
|
||||
|
||||
def binary_search_rec(array, item, lo=0, hi = None):
|
||||
def binary_search(array, item, hi=None, lo=0):
|
||||
'''
|
||||
>>> binary_search_rec([2,3,5,6,8,10,15,23], 15)
|
||||
(True, 6)
|
||||
>>> binary_search_rec([2,3,5,6,8,10,15,23], 4)
|
||||
>>> binary_search([2,3,5,6,8,10,15,23], 15)
|
||||
6
|
||||
>>> binary_search([2,3,5,6,8,10,15,23], 4)
|
||||
False
|
||||
>>> binary_search([1,3,4,5,7,8 ,10,12,23], 10)
|
||||
6
|
||||
>>> binary_search([1,3,4,5,7,8 ,10,12,23], 22)
|
||||
False
|
||||
'''
|
||||
|
||||
hi = hi or len(array)
|
||||
if hi < lo :
|
||||
if hi < lo:
|
||||
return False
|
||||
|
||||
mid = (hi + lo)//2
|
||||
|
||||
if array[mid] == item:
|
||||
return True, mid
|
||||
elif array[mid] < item:
|
||||
return binary_search_rec(array, item, mid + 1, hi)
|
||||
if item == array[mid]:
|
||||
return mid
|
||||
elif item < array[mid]:
|
||||
return binary_search(array, item, hi=mid-1, lo=lo)
|
||||
else:
|
||||
return binary_search_rec(array[:mid], item, lo, mid -1)
|
||||
return binary_search(array, item, hi=hi, lo=mid+1)
|
||||
|
||||
|
||||
|
||||
|
||||
def binary_search_iter(array, item):
|
||||
'''
|
||||
>>> binary_search_iter([2,3,5,6,8,10,15,23], 15)
|
||||
(True, 6)
|
||||
6
|
||||
>>> binary_search_iter([2,3,5,6,8,10,15,23], 4)
|
||||
False
|
||||
>>> binary_search_iter([1,3,4,5,7,8 ,10,12,23], 10)
|
||||
6
|
||||
>>> binary_search_iter([1,3,4,5,7,8 ,10,12,23], 22)
|
||||
False
|
||||
'''
|
||||
hi = len(array)
|
||||
lo = 0
|
||||
lo, hi = 0, len(array)
|
||||
|
||||
while lo < hi:
|
||||
mid = (hi+lo)//2
|
||||
if array[mid] == item:
|
||||
return True, mid
|
||||
return mid
|
||||
elif array[mid] > item:
|
||||
hi = mid
|
||||
else:
|
||||
lo = mid + 1
|
||||
lo=mid+1
|
||||
return False
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
||||
|
@ -3,62 +3,34 @@
|
||||
__author__ = "bt3"
|
||||
|
||||
|
||||
def merge_sort(seq):
|
||||
def merge_sort(array):
|
||||
'''
|
||||
>>> seq = [3, 5, 2, 6, 8, 1, 0, 3, 5, 6, 2]
|
||||
>>> merge_sort(seq)
|
||||
[0, 1, 2, 2, 3, 3, 5, 5, 6, 6, 8]
|
||||
>>> merge_sort([3 ,5, 1, 2, 10, 6])
|
||||
[1, 2, 3, 5, 6, 10]
|
||||
'''
|
||||
if len(seq) < 2:
|
||||
return seq
|
||||
mid = len(seq)//2
|
||||
lft, rgt = seq[:mid], seq[mid:]
|
||||
if len(lft)>1:
|
||||
lft = merge_sort(lft)
|
||||
if len(rgt)>1:
|
||||
rgt = merge_sort(rgt)
|
||||
if len(array) < 2:
|
||||
return array
|
||||
|
||||
mid = len(array)//2
|
||||
left = merge_sort(array[:mid])
|
||||
right = merge_sort(array[mid:])
|
||||
|
||||
res = []
|
||||
while lft and rgt:
|
||||
if lft [-1]>= rgt[-1]:
|
||||
res.append(lft.pop())
|
||||
else:
|
||||
res.append(rgt.pop())
|
||||
res.reverse()
|
||||
return(lft or rgt) + res
|
||||
|
||||
|
||||
|
||||
# separating the merge part in another function
|
||||
def merge_sort_sep(seq):
|
||||
'''
|
||||
>>> seq = [3, 5, 2, 6, 8, 1, 0, 3, 5, 6, 2]
|
||||
>>> merge_sort_sep(seq)
|
||||
[0, 1, 2, 2, 3, 3, 5, 5, 6, 6, 8]
|
||||
'''
|
||||
if len(seq) < 2 :
|
||||
return seq
|
||||
mid = len(seq)//2
|
||||
left = merge_sort(seq[:mid])
|
||||
right = merge_sort(seq[mid:]) # notice that mid is included!
|
||||
return merge(left, right) # merge iteratively
|
||||
|
||||
|
||||
def merge(left, right):
|
||||
if not left or not right:
|
||||
return left or right # nothing to be merged
|
||||
result = []
|
||||
i, j = 0, 0
|
||||
while i < len(left) and j < len(right):
|
||||
if left[i] <= right[j]:
|
||||
result.append(left[i])
|
||||
res.append(left[i])
|
||||
i += 1
|
||||
else:
|
||||
result.append(right[j])
|
||||
res.append(right[j])
|
||||
j += 1
|
||||
if left[i:] : result.extend(left[i:]) # REMEMBER TO EXTEND, NOT APPEND
|
||||
if right[j:] : result.extend(right[j:])
|
||||
return result
|
||||
|
||||
if left[i:]:
|
||||
res.extend(left[i:])
|
||||
if right[j:]:
|
||||
res.extend(right[j:])
|
||||
return res
|
||||
|
||||
|
||||
|
||||
''' Merge sort for files '''
|
||||
|
@ -18,11 +18,11 @@ def qs(array):
|
||||
left = [a for a in new_array if a <= piv_element]
|
||||
right = [a for a in new_array if a > piv_element]
|
||||
|
||||
|
||||
return qs(left) + [array[piv]] + qs(right)
|
||||
|
||||
|
||||
""" we can also divide them into two functions """
|
||||
|
||||
# we can also divide them into two functions
|
||||
def partition(seq):
|
||||
pi,seq = seq[0],seq[1:]
|
||||
lo = [x for x in seq if x <= pi]
|
||||
@ -41,9 +41,6 @@ def quick_sort_divided(seq):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
Loading…
x
Reference in New Issue
Block a user