Advertisement
Guest User

Untitled

a guest
Aug 27th, 2015
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. abstract class Sorter {
  2. void sort(List<Comparable> input);
  3. }
  4.  
  5. class BubbleSort extends Sorter {
  6. @override
  7. void sort(List<Comparable> input) {
  8. var n = input.length;
  9. var swapped = false;
  10. do {
  11. swapped = false;
  12. var newn = n;
  13. for (var i = 1; i < n; i++) {
  14. if (input[i].compareTo(input[i - 1]).isNegative) {
  15. swap(input, i - 1, i);
  16. swapped = true;
  17. newn = i;
  18. }
  19. }
  20. n = newn;
  21. } while(swapped);
  22. }
  23. }
  24.  
  25. class MergeSort extends Sorter {
  26. @override
  27. void sort(List<Comparable> input) {
  28. var list = mergeSort(input);
  29. input.replaceRange(0, input.length, list);
  30. }
  31.  
  32. List<Comparable> mergeSort(List<Comparable> input) {
  33. if (input.length <= 1) {
  34. return input;
  35. }
  36.  
  37. var middle = (input.length / 2).toInt();
  38.  
  39. var left = input.take(middle).toList();
  40. var right = input.skip(middle).toList();
  41. left = mergeSort(left);
  42. right = mergeSort(right);
  43.  
  44. return merge(left, right);
  45. }
  46.  
  47. List<Comparable> merge(List<Comparable> left, List<Comparable> right) {
  48. var list = [];
  49.  
  50. while (left.isNotEmpty && right.isNotEmpty) {
  51. if (left.first.compareTo(right.first).isNegative) {
  52. list.add(left.first);
  53. left = left.skip(1).toList();
  54. } else {
  55. list.add(right.first);
  56. right = right.skip(1).toList();
  57. }
  58. }
  59.  
  60. while (left.isNotEmpty) {
  61. list.add(left.first);
  62. left = left.skip(1).toList();
  63. }
  64.  
  65. while (right.isNotEmpty) {
  66. list.add(right.first);
  67. right = right.skip(1).toList();
  68. }
  69.  
  70. return list;
  71. }
  72. }
  73.  
  74. class BogoSort extends Sorter {
  75. @override
  76. void sort(List<Comparable> input) {
  77. bool isSorted() {
  78. var sorted = true;
  79. for (var i = 1; i < input.length; i++) {
  80. if (input[i].compareTo(input[i - 1]).isNegative) {
  81. sorted = false;
  82. }
  83. }
  84. return sorted;
  85. }
  86.  
  87. while (!isSorted()) {
  88. input.shuffle();
  89. }
  90. }
  91. }
  92.  
  93. void swap(List input, int a, int b) {
  94. var tmp = input[a];
  95. input[a] = input[b];
  96. input[b] = tmp;
  97. }
  98.  
  99. void main() {
  100. test([8, 4, 1, 4, 9, 1, 9, 19, 48, 10, 48, 672, 4719, 9, 0]);
  101. test(["B", "C", "T", "A", "R", "Z", "Y", "Q", "M", "G"]);
  102. }
  103.  
  104. void test(List data) {
  105. print("Input: ${data}");
  106. testSorter(data, "Bubble Sort", new BubbleSort());
  107. testSorter(data, "Merge Sort", new MergeSort());
  108. //testSorter(data, "BOGO Sort", new BogoSort());
  109. }
  110.  
  111. void testSorter(List data, String name, Sorter sorter) {
  112. data = new List.from(data);
  113. sorter.sort(data);
  114. print("${name}: ${data}");
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement