mirror of
https://github.com/jlengrand/Coding4Interviews.git
synced 2026-03-10 08:11:24 +00:00
Finishes implementing merge sort. Some more tests to be made before switching to something else
This commit is contained in:
@@ -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)
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user