mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-05-23 08:51:31 -04:00
cleaning up and organizing old problems (builtin)
This commit is contained in:
parent
6afe96fa4d
commit
3fdbc2a605
106 changed files with 480 additions and 1472 deletions
56
src/searching_and_sorting/binary_search.py
Normal file
56
src/searching_and_sorting/binary_search.py
Normal file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
__author__ = "bt3"
|
||||
|
||||
|
||||
|
||||
def binary_search_rec(array, item, lo=0, hi = None):
|
||||
'''
|
||||
>>> 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)
|
||||
False
|
||||
'''
|
||||
hi = hi or len(array)
|
||||
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)
|
||||
else:
|
||||
return binary_search_rec(array[:mid], item, lo, mid -1)
|
||||
|
||||
|
||||
|
||||
def binary_search_iter(array, item):
|
||||
'''
|
||||
>>> binary_search_iter([2,3,5,6,8,10,15,23], 15)
|
||||
(True, 6)
|
||||
>>> binary_search_iter([2,3,5,6,8,10,15,23], 4)
|
||||
False
|
||||
'''
|
||||
hi = len(array)
|
||||
lo = 0
|
||||
|
||||
while lo < hi:
|
||||
mid = (hi+lo)//2
|
||||
if array[mid] == item:
|
||||
return True, mid
|
||||
elif array[mid] > item:
|
||||
hi = mid
|
||||
else:
|
||||
lo = mid + 1
|
||||
return False
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
||||
|
47
src/searching_and_sorting/merge_and_sort_two_arrays.py
Normal file
47
src/searching_and_sorting/merge_and_sort_two_arrays.py
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
__author__ = "bt3"
|
||||
|
||||
|
||||
'''
|
||||
You have two arrays with N integers in them. Merge those arrays using a
|
||||
recursive algorithm so that the integers in the final array are sorted.
|
||||
'''
|
||||
|
||||
def merge_arrays(a1, a2):
|
||||
'''
|
||||
>>> merge_arrays([5, 4, 3], [6, 2, 9])
|
||||
[2, 3, 4, 5, 6, 9]
|
||||
>>> merge_arrays([2, 6], [6, 2])
|
||||
[2, 2, 6, 6]
|
||||
>>> merge_arrays([], [])
|
||||
[]
|
||||
'''
|
||||
# if they are not sorted yet
|
||||
a1.sort()
|
||||
a2.sort()
|
||||
|
||||
merge = []
|
||||
p1, p2 = 0, 0
|
||||
|
||||
while p1 < len(a1) and p2 < len(a2):
|
||||
if a1[p1] <= a2[p2]:
|
||||
merge.append(a1[p1])
|
||||
p1 += 1
|
||||
else:
|
||||
merge.append(a2[p2])
|
||||
p2 +=1
|
||||
|
||||
if a1[p1:]:
|
||||
merge.extend(a1[p1:])
|
||||
|
||||
if a2[p2:]:
|
||||
merge.extend(a2[p2:])
|
||||
|
||||
return merge
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
||||
|
27
src/searching_and_sorting/quick_sort.py
Normal file
27
src/searching_and_sorting/quick_sort.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
__author__ = "bt3"
|
||||
|
||||
|
||||
def qs(array):
|
||||
'''
|
||||
>>> qs([4,1,6,2,7,9,3])
|
||||
[1, 2, 3, 4, 6, 7, 9]
|
||||
'''
|
||||
if len(array) < 2:
|
||||
return array
|
||||
|
||||
piv = len(array)//2
|
||||
piv_element = array[piv]
|
||||
new_array = array[:piv] + array[piv+1:]
|
||||
|
||||
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)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import doctest
|
||||
doctest.testmod()
|
Loading…
Add table
Add a link
Reference in a new issue