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

View File

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

View File

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