more typos! 😓

This commit is contained in:
Mari Wahl 2015-01-09 15:33:43 -05:00
parent 56ad845ccc
commit bc442a0727
4 changed files with 47 additions and 68 deletions

Binary file not shown.

View File

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

View File

@ -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 '''

View File

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