diff --git a/src/benchmark.js b/src/benchmark.js index 31c1042..7c82580 100644 --- a/src/benchmark.js +++ b/src/benchmark.js @@ -17,54 +17,66 @@ const chance = new Chance(); // Helper Functions -function makeShuffledRange(len) { - const arr = []; - for (let i = 0; i <= len; i++) { - arr.push(i); - } - return arr.sort(() => Math.random() - 0.5); -} - -function isSorted(arr) { - let sorted = true; - for (let i = 0; i < arr.length - 1; i++) { - if (arr[i] > arr[i+1]) { - sorted = false; - break; - } - } - return sorted; -} - -function runIt(algo) { - const cp = [...testData]; - const start = performance.now(); - const result = algo(cp); - results.push({ name: algo.name, time: performance.now() - start }) - !isSorted(result) && console.log(algo.name, 'sorting failed!'); - result.length !== testData.length && console.log(algo.name, 'length mismatch!'); -} - // Main Testing // const testData = makeShuffledRange(10000); // const testData = makeRandomArrayOfChars(10000); // const testData = chance.n(chance.character, 10000); -const testData = chance.n(chance.hammertime, 10000); -const results = []; - -runIt(selectionSort); -runIt(bubbleSort); -runIt(quickSort); -runIt(insertionSort); -runIt(mergeSort); -runIt(heapSort); -runIt(cocktailShakerSort); -runIt(shellSort); -runIt(gnomeSort); -runIt(radixSort); // only works on ints -runIt(jsSort); -// runIt(bogoSort); // careful now +for (let numElements = 100; numElements < 10000000; numElements *= 10) { -console.table(results.sort((a, b) => a.time - b.time)); + function makeShuffledRange(len) { + const arr = []; + for (let i = 0; i <= len; i++) { + arr.push(i); + } + return arr.sort(() => Math.random() - 0.5); + } + + function isSorted(arr) { + let sorted = true; + for (let i = 0; i < arr.length - 1; i++) { + if (arr[i] > arr[i+1]) { + sorted = false; + break; + } + } + return sorted; + } + + function runIt(algo) { + const cp = [...testData]; + const start = performance.now(); + const result = algo(cp); + results.push({ name: algo.name, time: performance.now() - start }) + !isSorted(result) && console.log(algo.name, 'sorting failed!'); + result.length !== testData.length && console.log(algo.name, 'length mismatch!'); + } + + console.log(`\nGenerating test data for ${numElements} elements...`); + const testData = chance.n(chance.hammertime, numElements); + console.log('Running tests...'); + const results = []; + + // O(n) + runIt(radixSort); // only works on ints + // O(n log n) + runIt(jsSort); + runIt(mergeSort); + runIt(quickSort); + runIt(heapSort); + // Depends + runIt(shellSort); + // O(n^2) + runIt(bubbleSort); + runIt(cocktailShakerSort); + runIt(gnomeSort); + runIt(insertionSort); + runIt(selectionSort); + + + // runIt(bogoSort); // careful now + + console.table(results.sort((a, b) => a.time - b.time)); + +} \ No newline at end of file