diff --git a/algs4/heap.py b/algs4/heap.py index e4e7962..01bffb2 100644 --- a/algs4/heap.py +++ b/algs4/heap.py @@ -52,11 +52,20 @@ def sort(cls, arr): return arr + @classmethod + def is_sorted(cls, arr): + for i in range(1, len(arr)): + if arr[i] < arr[i-1]: + return False + return True + if __name__ == '__main__': import sys + items = [] for line in sys.stdin: - items = line.split() - print(' items: ', items) - print('sort items: ', Heap.sort(items)) + items.extend(line.split()) + print(' items: ', items) + print('sort items: ', Heap.sort(items)) + assert Heap.is_sorted(items) diff --git a/algs4/insertion.py b/algs4/insertion.py index 5382837..622a331 100644 --- a/algs4/insertion.py +++ b/algs4/insertion.py @@ -37,11 +37,20 @@ def sort(cls, arr): j -= 1 return arr + @classmethod + def is_sorted(cls, arr): + for i in range(1, len(arr)): + if arr[i] < arr[i-1]: + return False + return True + if __name__ == '__main__': import sys + items = [] for line in sys.stdin: - items = line.split() - print(' items: ', items) - print('sort items: ', Insertion.sort(items)) + items.extend(line.split()) + print(' items: ', items) + print('sort items: ', Insertion.sort(items)) + assert Insertion.is_sorted(items) diff --git a/algs4/merge.py b/algs4/merge.py index 317aeb6..003d9dd 100644 --- a/algs4/merge.py +++ b/algs4/merge.py @@ -51,7 +51,7 @@ def mergesort(cls, arr, lo, hi): if lo >= hi: return - mid = (lo + hi) / 2 + mid = (lo + hi) // 2 cls.mergesort(arr, lo, mid) cls.mergesort(arr, mid + 1, hi) cls.merge(arr, lo, mid, hi) @@ -61,11 +61,20 @@ def mergesort(cls, arr, lo, hi): def sort(cls, arr): return cls.mergesort(arr, 0, len(arr) - 1) + @classmethod + def is_sorted(cls, arr): + for i in range(1, len(arr)): + if arr[i] < arr[i-1]: + return False + return True + if __name__ == '__main__': import sys + items = [] for line in sys.stdin: - items = line.split() - print(' items: ', items) - print('sort items: ', Merge.sort(items)) + items.extend(line.split()) + print(' items: ', items) + print('sort items: ', Merge.sort(items)) + assert Merge.is_sorted(items) diff --git a/algs4/selection.py b/algs4/selection.py index 3ba0f0b..183e7cb 100644 --- a/algs4/selection.py +++ b/algs4/selection.py @@ -36,11 +36,20 @@ def sort(cls, arr): arr[i], arr[minIndex] = arr[minIndex], arr[i] return arr + @classmethod + def is_sorted(cls, arr): + for i in range(1, len(arr)): + if arr[i] < arr[i-1]: + return False + return True + if __name__ == '__main__': import sys + items = [] for line in sys.stdin: - items = line.split() - print(' items: ', items) - print('sort items: ', Selection.sort(items)) + items.extend(line.split()) + print(' items: ', items) + print('sort items: ', Selection.sort(items)) + assert Selection.is_sorted(items) diff --git a/algs4/shell.py b/algs4/shell.py index c761647..aa151b9 100644 --- a/algs4/shell.py +++ b/algs4/shell.py @@ -1,7 +1,7 @@ """ Sorts a sequence of strings from standard input using shell sort. - + % more tiny.txt S O R T E X A M P L E @@ -10,7 +10,7 @@ A E E L M O P R S T X [ one string per line ] - + % more words3.txt @@ -29,7 +29,7 @@ class Shell: def sort(cls, arr): N = len(arr) h = 1 - while h < N / 3: + while h < N // 3: h = 3 * h + 1 # 1, 4, 13, 40... while h >= 1: @@ -40,14 +40,23 @@ def sort(cls, arr): break arr[j], arr[j - h] = arr[j - h], arr[j] j -= h - h /= 3 + h //= 3 return arr + @classmethod + def is_sorted(cls, arr): + for i in range(1, len(arr)): + if arr[i] < arr[i-1]: + return False + return True + if __name__ == '__main__': import sys + items = [] for line in sys.stdin: - items = line.split() - print(' items: ', items) - print('sort items: ', Shell.sort(items)) + items.extend(line.split()) + print(' items: ', items) + print('sort items: ', Shell.sort(items)) + assert Shell.is_sorted(items)