From 5211c1d656c266e0bb41375b7f3e741a4631c678 Mon Sep 17 00:00:00 2001 From: Nathan Samano Date: Thu, 16 Apr 2015 21:00:53 -0400 Subject: [PATCH 1/4] attempt at running heapsort on CArray --- sort.js | 43 +++++++++++++++++++++++++++++++++++++++++++ testHeap.js | 8 ++++++++ 2 files changed, 51 insertions(+) create mode 100644 sort.js create mode 100644 testHeap.js diff --git a/sort.js b/sort.js new file mode 100644 index 00000000..2a803a39 --- /dev/null +++ b/sort.js @@ -0,0 +1,43 @@ +(function(exports) { + + var foo = (function() { + +function CArray(numElements) { + this.dataStore = []; + this.pos = 0; + this.numElements = numElements; + this.insert = insert; + this.toString = toString; + this.clear = clear; + this.setData = setData; + for (var i = 0; i < numElements; ++i) { + this.dataStore[i] = i; + } +} +function setData() { + for (var i = 0; i < this.numElements; ++i) { + this.dataStore[i] = Math.floor(Math.random() * + (this.numElements+1)); + } +} +function clear() { + for (var i = 0; i < this.dataStore.length; ++i) { + this.dataStore[i] = 0; + } +} +function insert(element) { + this.dataStore[this.pos++] = element; +} +function toString() { + var retstr = ""; + for (var i = 0; i < this.dataStore.length; ++i) { + retstr += this.dataStore[i] + " "; + if (i > 0 && i % 10 == 0) { + retstr += "\n"; + } + } + return retstr; +} +}()); + exports.foo = foo; +})(typeof window === 'undefined' ? module.exports : window); diff --git a/testHeap.js b/testHeap.js new file mode 100644 index 00000000..af1dfd8c --- /dev/null +++ b/testHeap.js @@ -0,0 +1,8 @@ +require('./sort.js').foo; +var sort = require('./src/sorting/heapsort.js').heapSort; +console.log(sort([2,5,1,0,4])); + +var arr = new CArray(50); +arr.setDate(); +console.log(arr.toString()); +console.log(sort(arr)); From 96d7be6c00a2deb7b5bce8fd16ed50d093f7698f Mon Sep 17 00:00:00 2001 From: Nathan Samano Date: Mon, 20 Apr 2015 13:48:45 -0400 Subject: [PATCH 2/4] got capouch's code --- testHeap.js | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/testHeap.js b/testHeap.js index af1dfd8c..9cc25896 100644 --- a/testHeap.js +++ b/testHeap.js @@ -1,8 +1,25 @@ -require('./sort.js').foo; +function dispArr(arr) { + for (var i = 0; i < arr.length; ++i) { + process.stdout.write(arr[i] + " "); + if (i % 10 == 9) { + process.stdout.write("\n"); + } + } + if (i % 10 != 0) { + process.stdout.write("\n"); + } + } + +var MAX = 50 var sort = require('./src/sorting/heapsort.js').heapSort; -console.log(sort([2,5,1,0,4])); +var values = []; +for (var i = 0; i < MAX; ++i) { + values[i] = Math.floor(Math.random() * MAX+1); + } + +console.log('\nBefore: '); +dispArr(values); +console.log('\nAfter: '); + +dispArr(sort(values)); -var arr = new CArray(50); -arr.setDate(); -console.log(arr.toString()); -console.log(sort(arr)); From 88646f87314b8f35920b76b112ec259d1358daa7 Mon Sep 17 00:00:00 2001 From: Nathan Samano Date: Tue, 21 Apr 2015 20:37:55 -0400 Subject: [PATCH 3/4] heapsort now prints the array at each step to witness swaps --- src/sorting/heapsort.js | 10 ++++++++-- testHeap.js | 32 +++++++++++++++++++------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/sorting/heapsort.js b/src/sorting/heapsort.js index 765adc3a..6ec1e02e 100644 --- a/src/sorting/heapsort.js +++ b/src/sorting/heapsort.js @@ -18,24 +18,30 @@ * @param {function} cmp Comparison function. */ function heapify(array, index, heapSize, cmp) { + //console.log("Begin heapify: array=" + array + " index=" + index + //+ " heapSize=" + heapSize + " cmp=" + cmp); + var left = 2 * index + 1; var right = 2 * index + 2; var largest = index; + //console.log("left=" + left + " right=" + right + " largest=" + largest); + if (left < heapSize && cmp(array[left], array[index]) > 0) { largest = left; } - + //console.log("largest=" + largest); if (right < heapSize && cmp(array[right], array[largest]) > 0) { largest = right; } - + //console.log("largest=" + largest); if (largest !== index) { var temp = array[index]; array[index] = array[largest]; array[largest] = temp; heapify(array, largest, heapSize, cmp); } + console.log(array); } /** diff --git a/testHeap.js b/testHeap.js index 9cc25896..1cfc24e7 100644 --- a/testHeap.js +++ b/testHeap.js @@ -1,21 +1,27 @@ +/* Test Heapsort Code + * + */ + function dispArr(arr) { - for (var i = 0; i < arr.length; ++i) { - process.stdout.write(arr[i] + " "); - if (i % 10 == 9) { - process.stdout.write("\n"); - } - } - if (i % 10 != 0) { - process.stdout.write("\n"); - } - } + for (var i = 0; i < arr.length; ++i) { + process.stdout.write(arr[i] + " "); + if (i % 10 == 9) { + process.stdout.write("\n"); + } + } + if (i % 10 != 0) { + process.stdout.write("\n"); + } +} var MAX = 50 var sort = require('./src/sorting/heapsort.js').heapSort; var values = []; -for (var i = 0; i < MAX; ++i) { - values[i] = Math.floor(Math.random() * MAX+1); - } +/*for (var i = 0; i < MAX; ++i) { + values[i] = Math.floor(Math.random() * MAX+1); +}*/ + +values = [40,7,41,13,19,92,51,31]; console.log('\nBefore: '); dispArr(values); From 8b378c8428cdb85cb19121d2b5e64eec72f564b6 Mon Sep 17 00:00:00 2001 From: Nathan Samano Date: Wed, 22 Apr 2015 13:03:00 -0400 Subject: [PATCH 4/4] added one more print --- src/sorting/heapsort.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sorting/heapsort.js b/src/sorting/heapsort.js index 6ec1e02e..eef5b232 100644 --- a/src/sorting/heapsort.js +++ b/src/sorting/heapsort.js @@ -88,6 +88,7 @@ array[0] = array[i]; array[i] = temp; size -= 1; + console.log(array); heapify(array, 0, size, cmp); } return array;