diff --git a/sorts/bubble_sort.py b/sorts/bubble_sort.py index 359a4b21d..9ff987fa9 100644 --- a/sorts/bubble_sort.py +++ b/sorts/bubble_sort.py @@ -1,18 +1,34 @@ from __future__ import print_function -def bubble_sort(arr): - n = len(arr) - # Traverse through all array elements - for i in range(n): - # Last i elements are already in place - for j in range(0, n-i-1): - # traverse the array from 0 to n-i-1 - # Swap if the element found is greater - # than the next element - if arr[j] > arr[j+1] : - arr[j], arr[j+1] = arr[j+1], arr[j] - return arr - + +def bubble_sort(collection): + """Pure implementation of bubble sort algorithm in Python + + :param collection: some mutable ordered collection with heterogeneous + comparable items inside + :return: the same collection ordered by ascending + + Examples: + >>> bubble_sort([0, 5, 3, 2, 2]) + [0, 2, 2, 3, 5] + + >>> bubble_sort([]) + [] + + >>> bubble_sort([-2, -5, -45]) + [-45, -5, -2] + """ + length = len(collection) + for i in range(length-1): + swapped = False + for j in range(length-1-i): + if collection[j] > collection[j+1]: + swapped = True + collection[j], collection[j+1] = collection[j+1], collection[j] + if not swapped: break # Stop iteration if the collection is sorted. + return collection + + if __name__ == '__main__': try: raw_input # Python 2 diff --git a/sorts/selection_sort.py b/sorts/selection_sort.py index 432d14090..c1d66c5a8 100644 --- a/sorts/selection_sort.py +++ b/sorts/selection_sort.py @@ -31,7 +31,7 @@ def selection_sort(collection): """ length = len(collection) - for i in range(length): + for i in range(length - 1): least = i for k in range(i + 1, length): if collection[k] < collection[least]: