diff --git a/03_MergeSort/ms.py b/03_MergeSort/ms.py index a7fe1f0..8ee5f23 100644 --- a/03_MergeSort/ms.py +++ b/03_MergeSort/ms.py @@ -7,7 +7,7 @@ Implementation of the MergeSort algorithm class TableSorter(): """ - A utili=ty that provides way to sort arrays of elements. + A utility that provides a way to sort arrays of elements. It should be possible to compare elements to each others (meaning a > b and a == b should make sense). """ @@ -23,9 +23,38 @@ class TableSorter(): """ if len(table) < 1: return None + elif len(table) == 1: + return table if idx_max == None: idx_max = len(table) - #TODO: Implement - return None + t_1 = self.mergeSort(table[:len(table)/2]) + t_2 = self.mergeSort(table[len(table)/2:]) + + return self._merge(t_1, t_2) + + def _merge(self, t_1, t_2): + """ + Returns a sorted array t being the concatenation of values from t_1 and t_2. + t_1 and t_2 are expected to be sorted themselves. + """ + t = [] + + while(t_1 != [] or t_2 != []): + if(t_1 == []): + t.append(t_2.pop(0)) + elif(t_2 == []): + t.append(t_1.pop(0)) + else: + if(t_1[0] < t_2[0]): + t.append(t_1.pop(0)) + else: + t.append(t_2.pop(0)) + + return t + +if __name__ == "__main__": + table = [1, 2, 3, 4] + sorter = TableSorter() + sorter.mergeSort(table) \ No newline at end of file diff --git a/03_MergeSort/ms_test.py b/03_MergeSort/ms_test.py index 7ccb911..3955018 100644 --- a/03_MergeSort/ms_test.py +++ b/03_MergeSort/ms_test.py @@ -10,13 +10,39 @@ import unittest class test_table_sorter(unittest.TestCase): - #TODO: Implement + def test_merge(self): + table = [1, 2] + t_1 = [1] + t_2 = [2] + + sorter = TableSorter() + self.assertEqual(table, sorter._merge(t_1, t_2)) + + t_1 = [2] + t_2 = [1] + self.assertEqual(table, sorter._merge(t_1, t_2)) + + table = [1, 2, 3, 5] + t_1 = [2, 5] + t_2 = [1, 3] + self.assertEqual(table, sorter._merge(t_1, t_2)) + + t_1 = [3, 5] + t_2 = [1, 2] + self.assertEqual(table, sorter._merge(t_1, t_2)) + def test_mergeSort(self): - table = [1] + table = [] sorter = TableSorter() self.assertEqual(None, sorter.mergeSort(table)) + table = [1] + self.assertEqual(table, sorter.mergeSort(table)) + + table = [1, 2] + self.assertEqual(table, sorter.mergeSort(table)) + if __name__ == "__main__": unittest.main()