cleaning up and organizing old problems (builtin)

This commit is contained in:
Mari Wahl 2015-01-06 20:10:48 -05:00
parent 6afe96fa4d
commit 3fdbc2a605
106 changed files with 480 additions and 1472 deletions

View 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()

View 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()

View 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()