diff --git a/list/.idea/uiDesigner.xml b/list/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/list/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/list/src/main/java/de/vivi/list/Main.java b/list/src/main/java/de/vivi/list/Main.java
index 8824ab0..499a288 100644
--- a/list/src/main/java/de/vivi/list/Main.java
+++ b/list/src/main/java/de/vivi/list/Main.java
@@ -5,6 +5,7 @@ import de.vivi.list.list.ByteList;
import de.vivi.list.list.LinkedByteList;
import de.vivi.list.sort.BubbleSort;
import de.vivi.list.sort.ByteSort;
+import de.vivi.list.sort.MergeSort;
public class Main {
@@ -85,12 +86,12 @@ public class Main {
private static void testSort(ByteList list) {
ByteSort bubble = new BubbleSort();
-// ByteSort merge = new MergeSort();
+ ByteSort merge = new MergeSort();
// ByteSort bogo = new BogoSort();
//
// // sort the lists with the sorting algorithm
- bubble.sort(list);
-// merge.sort(list.copy());
+// bubble.sort(list);
+ merge.sort(list);
// bogo.sort(list.copy());
}
}
diff --git a/list/src/main/java/de/vivi/list/list/ArrayByteList.java b/list/src/main/java/de/vivi/list/list/ArrayByteList.java
index 7e4b371..fb1549c 100644
--- a/list/src/main/java/de/vivi/list/list/ArrayByteList.java
+++ b/list/src/main/java/de/vivi/list/list/ArrayByteList.java
@@ -47,6 +47,11 @@ public class ArrayByteList implements ByteList {
values[index] = value;
}
+ @Override
+ public void clear() {
+ values = new byte[0];
+ }
+
@Override
public int size() {
return values.length;
diff --git a/list/src/main/java/de/vivi/list/list/ByteList.java b/list/src/main/java/de/vivi/list/list/ByteList.java
index 57eba75..dedcc39 100644
--- a/list/src/main/java/de/vivi/list/list/ByteList.java
+++ b/list/src/main/java/de/vivi/list/list/ByteList.java
@@ -12,5 +12,7 @@ public interface ByteList extends Iterable {
void set(int index, byte value);
+ void clear();
+
int size();
}
diff --git a/list/src/main/java/de/vivi/list/list/LinkedByteList.java b/list/src/main/java/de/vivi/list/list/LinkedByteList.java
index 733fe01..99f7023 100644
--- a/list/src/main/java/de/vivi/list/list/LinkedByteList.java
+++ b/list/src/main/java/de/vivi/list/list/LinkedByteList.java
@@ -114,6 +114,11 @@ public class LinkedByteList implements ByteList {
entry.value = value;
}
+ @Override
+ public void clear() {
+ root = null;
+ }
+
@Override
public int size() {
return size;
diff --git a/list/src/main/java/de/vivi/list/sort/BubbleSort.java b/list/src/main/java/de/vivi/list/sort/BubbleSort.java
index 861edc8..c19457f 100644
--- a/list/src/main/java/de/vivi/list/sort/BubbleSort.java
+++ b/list/src/main/java/de/vivi/list/sort/BubbleSort.java
@@ -20,8 +20,6 @@ public class BubbleSort implements ByteSort {
list.set(i + 1, temp);
}
}
-
- System.out.println(list);
}
}
}
diff --git a/list/src/main/java/de/vivi/list/sort/MergeSort.java b/list/src/main/java/de/vivi/list/sort/MergeSort.java
new file mode 100644
index 0000000..a4f8346
--- /dev/null
+++ b/list/src/main/java/de/vivi/list/sort/MergeSort.java
@@ -0,0 +1,60 @@
+package de.vivi.list.sort;
+
+import de.vivi.list.list.ArrayByteList;
+import de.vivi.list.list.ByteList;
+
+public class MergeSort implements ByteSort {
+
+ @Override
+ public void sort(ByteList list) {
+ if (list.size() <= 1) {
+ return;
+ }
+
+ ByteList left = new ArrayByteList();
+ ByteList right = new ArrayByteList();
+
+ split(list, left, right);
+
+ if (left.size() > 1) {
+ sort(left);
+ }
+
+ if (right.size() > 1) {
+ sort(right);
+ }
+
+ int leftIndex = 0;
+ int rightIndex = 0;
+
+ while (leftIndex < left.size() && rightIndex < right.size()) {
+ if (left.get(leftIndex) < right.get(rightIndex)) {
+ list.add(left.get(leftIndex++));
+ } else {
+ list.add(right.get(rightIndex++));
+ }
+ }
+
+ while (leftIndex < left.size()) {
+ list.add(left.get(leftIndex++));
+ }
+
+ while (rightIndex < right.size()) {
+ list.add(right.get(rightIndex++));
+ }
+ }
+
+ private void split(ByteList list, ByteList left, ByteList right) {
+ int half = list.size() >> 1; // divide by two
+
+ for (int i = 0; i < list.size(); i++) {
+ if (i < half) {
+ left.add(list.get(i));
+ } else {
+ right.add(list.get(i));
+ }
+ }
+
+ list.clear();
+ }
+}