Advertisement
Guest User

Untitled

a guest
Dec 11th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4.  
  5. def merge(arr1, arr2):
  6. idx = ldx = 0
  7. l1 = len(arr1)
  8. l2 = len(arr2)
  9. tmp = []
  10. while idx < l1 and ldx < l2:
  11. a, b = arr1[idx], arr2[ldx]
  12. if a < b:
  13. tmp.append(a)
  14. idx += 1
  15. else:
  16. tmp.append(b)
  17. ldx += 1
  18.  
  19. return tmp + arr1[idx:] + arr2[ldx:]
  20.  
  21.  
  22. def sort(arr):
  23. l = len(arr)
  24. if l < 2:
  25. return arr
  26. elif l == 2:
  27. a, b = arr
  28. return [a, b] if a < b else [b, a]
  29. else:
  30. mdx = len(arr) / 2
  31. arr1, arr2 = arr[:mdx], arr[mdx:]
  32. return merge(sort(arr1), sort(arr2))
  33.  
  34.  
  35. if __name__ == "__main__":
  36. import unittest
  37.  
  38. class Tests(unittest.TestCase):
  39.  
  40. def test_sort_0(self):
  41. self.assertEqual([], sort([]))
  42.  
  43. def test_sort_1(self):
  44. self.assertEqual([1], sort([1]))
  45.  
  46. def test_sort_2(self):
  47. self.assertEqual([1, 2], sort([2, 1]))
  48.  
  49. def test_sort_3(self):
  50. self.assertEqual(
  51. [1, 2, 3, 4, 5],
  52. sort([2, 3, 4, 5, 1])
  53. )
  54.  
  55. def test_sort_4(self):
  56. self.assertEqual(
  57. list(range(100)),
  58. sort(list(reversed(range(100))))
  59. )
  60.  
  61. unittest.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement