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" + } +}