From 7546124b73de4b304a22bf478b9fd426a7552462 Mon Sep 17 00:00:00 2001 From: Lee Sun-Hyoup Date: Sun, 22 May 2016 17:48:58 +0900 Subject: [PATCH 1/2] Add Mergesort in category. --- algorithm/category.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 +} From 7a2f529053ed3bbf61cbc87da2423122ebbccf1f Mon Sep 17 00:00:00 2001 From: Lee Sun-Hyoup Date: Sun, 22 May 2016 18:12:36 +0900 Subject: [PATCH 2/2] Add merge sort --- algorithm/sorting/merge/basic/code.js | 76 +++++++++++++++++++++++++++ algorithm/sorting/merge/basic/data.js | 3 ++ algorithm/sorting/merge/desc.json | 13 +++++ 3 files changed, 92 insertions(+) create mode 100644 algorithm/sorting/merge/basic/code.js create mode 100644 algorithm/sorting/merge/basic/data.js create mode 100644 algorithm/sorting/merge/desc.json 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" + } +}