diff --git a/algorithm/category.json b/algorithm/category.json
index 81b8abb0..f1f7f8ee 100644
--- a/algorithm/category.json
+++ b/algorithm/category.json
@@ -18,7 +18,8 @@
"insertion": "Insertion Sort",
"selection": "Selection Sort",
"bubble": "Bubble Sort",
- "quick": "Quicksort"
+ "quick": "Quicksort",
+ "merge": "Mergesort"
}
},
"etc": {
@@ -28,4 +29,4 @@
"scratch_paper": " Scratch Paper"
}
}
-}
\ No newline at end of file
+}
diff --git a/algorithm/sorting/merge/basic/code.js b/algorithm/sorting/merge/basic/code.js
new file mode 100644
index 00000000..d3d0a175
--- /dev/null
+++ b/algorithm/sorting/merge/basic/code.js
@@ -0,0 +1,76 @@
+tracer._print('original array = [' + D.join(', ') + ']');
+tracer._sleep(1000);
+tracer._pace(500);
+
+function mergeSort(start, end) {
+ if (Math.abs(end - start) <= 1) {
+ return [];
+ }
+
+ var middle = Math.ceil((start + end) / 2);
+
+ mergeSort(start, middle);
+ mergeSort(middle, end);
+
+ tracer._print('divide left[' + start + ', ' + (middle-1) + '], right[' + (middle) + ', ' + (end-1) + ']');
+
+ return mergeSort.merge(start, middle, end);
+}
+
+mergeSort.merge = function (start, middle, end) {
+ var left = Array();
+ var right = Array();
+
+ var leftSize = middle - start;
+ var rightSize = end - middle;
+ var maxSize = Math.max(leftSize, rightSize);
+ var size = end - start;
+ var i;
+
+ for (i = 0; i < maxSize; i++) {
+ if (i < leftSize) {
+ left.push(D[start + i]);
+ tracer._select(start + i);
+ tracer._print('insert value into left array[' + i +'] = ' + D[start + i]);
+ }
+ if (i < rightSize) {
+ right.push(D[middle + i]);
+ tracer._select(middle + i);
+ tracer._print('insert value into right array[' + i +'] = ' + D[middle + i]);
+ }
+ }
+ tracer._print('left array = [' + left.join(', ') + '],' + 'right array = [' + right.join(', ') + ']');
+
+ i = 0;
+ while (i < size) {
+ if (left[0] && right[0]) {
+ if (left[0] > right[0]) {
+ D[start + i] = right.shift();
+ tracer._print('rewrite from right array[' + i + '] = ' + D[start+i]);
+ } else {
+ D[start + i] = left.shift();
+ tracer._print('rewrite from left array[' + i + '] = ' + D[start+i]);
+ }
+ } else if (left[0]) {
+ D[start + i] = left.shift();
+ tracer._print('rewrite from left array[' + i + '] = ' + D[start+i]);
+ } else {
+ D[start + i] = right.shift();
+ tracer._print('rewrite from right array[' + i + '] = ' + D[start+i]);
+ }
+
+ tracer._deselect(start + i);
+ tracer._notify(start + i);
+
+ i++;
+ }
+
+ tempArray = Array();
+ for (i=start; iWikipedia"
+ ],
+ "files": {
+ "basic": "Basic"
+ }
+}