mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-30 04:36:08 -04:00
more typos! 😓
This commit is contained in:
parent
56ad845ccc
commit
bc442a0727
Binary file not shown.
@ -3,43 +3,50 @@
|
|||||||
__author__ = "bt3"
|
__author__ = "bt3"
|
||||||
|
|
||||||
|
|
||||||
|
def binary_search(array, item, hi=None, lo=0):
|
||||||
def binary_search_rec(array, item, lo=0, hi = None):
|
|
||||||
'''
|
'''
|
||||||
>>> binary_search_rec([2,3,5,6,8,10,15,23], 15)
|
>>> binary_search([2,3,5,6,8,10,15,23], 15)
|
||||||
(True, 6)
|
6
|
||||||
>>> binary_search_rec([2,3,5,6,8,10,15,23], 4)
|
>>> 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
|
False
|
||||||
'''
|
'''
|
||||||
|
|
||||||
hi = hi or len(array)
|
hi = hi or len(array)
|
||||||
if hi < lo:
|
if hi < lo:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
mid = (hi + lo)//2
|
mid = (hi + lo)//2
|
||||||
|
if item == array[mid]:
|
||||||
if array[mid] == item:
|
return mid
|
||||||
return True, mid
|
elif item < array[mid]:
|
||||||
elif array[mid] < item:
|
return binary_search(array, item, hi=mid-1, lo=lo)
|
||||||
return binary_search_rec(array, item, mid + 1, hi)
|
|
||||||
else:
|
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):
|
def binary_search_iter(array, item):
|
||||||
'''
|
'''
|
||||||
>>> binary_search_iter([2,3,5,6,8,10,15,23], 15)
|
>>> 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)
|
>>> binary_search_iter([2,3,5,6,8,10,15,23], 4)
|
||||||
False
|
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, hi = 0, len(array)
|
||||||
lo = 0
|
|
||||||
|
|
||||||
while lo < hi:
|
while lo < hi:
|
||||||
mid = (hi+lo)//2
|
mid = (hi+lo)//2
|
||||||
if array[mid] == item:
|
if array[mid] == item:
|
||||||
return True, mid
|
return mid
|
||||||
elif array[mid] > item:
|
elif array[mid] > item:
|
||||||
hi = mid
|
hi = mid
|
||||||
else:
|
else:
|
||||||
@ -50,6 +57,9 @@ def binary_search_iter(array, item):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import doctest
|
import doctest
|
||||||
doctest.testmod()
|
doctest.testmod()
|
||||||
|
@ -3,62 +3,34 @@
|
|||||||
__author__ = "bt3"
|
__author__ = "bt3"
|
||||||
|
|
||||||
|
|
||||||
def merge_sort(seq):
|
def merge_sort(array):
|
||||||
'''
|
'''
|
||||||
>>> seq = [3, 5, 2, 6, 8, 1, 0, 3, 5, 6, 2]
|
>>> merge_sort([3 ,5, 1, 2, 10, 6])
|
||||||
>>> merge_sort(seq)
|
[1, 2, 3, 5, 6, 10]
|
||||||
[0, 1, 2, 2, 3, 3, 5, 5, 6, 6, 8]
|
|
||||||
'''
|
'''
|
||||||
if len(seq) < 2:
|
if len(array) < 2:
|
||||||
return seq
|
return array
|
||||||
mid = len(seq)//2
|
|
||||||
lft, rgt = seq[:mid], seq[mid:]
|
mid = len(array)//2
|
||||||
if len(lft)>1:
|
left = merge_sort(array[:mid])
|
||||||
lft = merge_sort(lft)
|
right = merge_sort(array[mid:])
|
||||||
if len(rgt)>1:
|
|
||||||
rgt = merge_sort(rgt)
|
|
||||||
|
|
||||||
res = []
|
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
|
i, j = 0, 0
|
||||||
while i < len(left) and j < len(right):
|
while i < len(left) and j < len(right):
|
||||||
if left[i] <= right[j]:
|
if left[i] <= right[j]:
|
||||||
result.append(left[i])
|
res.append(left[i])
|
||||||
i += 1
|
i += 1
|
||||||
else:
|
else:
|
||||||
result.append(right[j])
|
res.append(right[j])
|
||||||
j += 1
|
j += 1
|
||||||
if left[i:] : result.extend(left[i:]) # REMEMBER TO EXTEND, NOT APPEND
|
|
||||||
if right[j:] : result.extend(right[j:])
|
if left[i:]:
|
||||||
return result
|
res.extend(left[i:])
|
||||||
|
if right[j:]:
|
||||||
|
res.extend(right[j:])
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
''' Merge sort for files '''
|
''' Merge sort for files '''
|
||||||
|
@ -18,11 +18,11 @@ def qs(array):
|
|||||||
left = [a for a in new_array if a <= piv_element]
|
left = [a for a in new_array if a <= piv_element]
|
||||||
right = [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)
|
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):
|
def partition(seq):
|
||||||
pi,seq = seq[0],seq[1:]
|
pi,seq = seq[0],seq[1:]
|
||||||
lo = [x for x in seq if x <= pi]
|
lo = [x for x in seq if x <= pi]
|
||||||
@ -41,9 +41,6 @@ def quick_sort_divided(seq):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import doctest
|
import doctest
|
||||||
doctest.testmod()
|
doctest.testmod()
|
Loading…
x
Reference in New Issue
Block a user