X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=quick-select.js;h=d45a9e8b4bf653c38142ebabf026cd59ef0adc44;hb=47006ddf6055b02dd084ae91269f12b44ce8225d;hp=cf8f23540d31add705554d9ccb71ac4b3339e0ca;hpb=ed2968f2ee816cb47841f537bcbfb8590aa7bbb9;p=benchmarks-js.git diff --git a/quick-select.js b/quick-select.js index cf8f235..d45a9e8 100644 --- a/quick-select.js +++ b/quick-select.js @@ -1,8 +1,11 @@ -const Benchmark = require('benchmark') -const { generateRandomInteger, LIST_FORMATTER } = require('./benchmark-utils') - -const suite = new Benchmark.Suite() +const Benchmark = require('benny') +const { generateRandomInteger } = require('./benchmark-utils') +/** + * @param numberOfWorkers + * @param maxNumberOfTasksPerWorker + * @returns + */ function generateRandomTasksMap ( numberOfWorkers, maxNumberOfTasksPerWorker = 10 @@ -17,6 +20,10 @@ function generateRandomTasksMap ( const tasksMap = generateRandomTasksMap(60, 20) +/** + * @param tasksMap + * @returns + */ function loopSelect (tasksMap) { let minValue = Infinity let minKey @@ -31,6 +38,10 @@ function loopSelect (tasksMap) { return [minKey, minValue] } +/** + * @param tasksMap + * @returns + */ function arraySortSelect (tasksMap) { const tasksArray = Array.from(tasksMap) return tasksArray.sort((a, b) => { @@ -52,15 +63,28 @@ const defaultPivotIndexSelect = (leftIndex, rightIndex) => { } const randomPivotIndexSelect = (leftIndex, rightIndex) => { - return generateRandomInteger(leftIndex, rightIndex) + return generateRandomInteger(rightIndex, leftIndex) } +/** + * @param array + * @param index1 + * @param index2 + */ function swap (array, index1, index2) { const tmp = array[index1] array[index1] = array[index2] array[index2] = tmp } +/** + * @param array + * @param leftIndex + * @param rightIndex + * @param pivotIndex + * @param compare + * @returns + */ function partition ( array, leftIndex, @@ -81,6 +105,15 @@ function partition ( return storeIndex } +/** + * @param array + * @param k + * @param leftIndex + * @param rightIndex + * @param compare + * @param pivotIndexSelect + * @returns + */ function selectLoop ( array, k, @@ -103,6 +136,15 @@ function selectLoop ( } } +/** + * @param array + * @param k + * @param leftIndex + * @param rightIndex + * @param compare + * @param pivotIndexSelect + * @returns + */ function selectRecursion ( array, k, @@ -123,6 +165,10 @@ function selectRecursion ( } } +/** + * @param tasksMap + * @returns + */ function quickSelectLoop (tasksMap) { const tasksArray = Array.from(tasksMap) @@ -131,6 +177,10 @@ function quickSelectLoop (tasksMap) { }) } +/** + * @param tasksMap + * @returns + */ function quickSelectLoopRandomPivot (tasksMap) { const tasksArray = Array.from(tasksMap) @@ -146,6 +196,10 @@ function quickSelectLoopRandomPivot (tasksMap) { ) } +/** + * @param tasksMap + * @returns + */ function quickSelectRecursion (tasksMap) { const tasksArray = Array.from(tasksMap) @@ -154,6 +208,10 @@ function quickSelectRecursion (tasksMap) { }) } +/** + * @param tasksMap + * @returns + */ function quickSelectRecursionRandomPivot (tasksMap) { const tasksArray = Array.from(tasksMap) @@ -169,41 +227,41 @@ function quickSelectRecursionRandomPivot (tasksMap) { ) } -// console.log(Array.from(tasksMap)) -// console.log(loopSelect(tasksMap)) -// console.log(arraySortSelect(tasksMap)) -// console.log(quickSelectLoop(tasksMap)) -// console.log(quickSelectLoopRandomPivot(tasksMap)) -// console.log(quickSelectRecursion(tasksMap)) -// console.log(quickSelectRecursionRandomPivot(tasksMap)) - -suite - .add('Loop select', function () { +Benchmark.suite( + 'Quick select', + Benchmark.add('Loop select', () => { loopSelect(tasksMap) - }) - .add('Array sort select', function () { + }), + Benchmark.add('Array sort select', () => { arraySortSelect(tasksMap) - }) - .add('Quick select loop', function () { + }), + Benchmark.add('Quick select loop', () => { quickSelectLoop(tasksMap) - }) - .add('Quick select loop with random pivot', function () { + }), + Benchmark.add('Quick select loop with random pivot', () => { quickSelectLoopRandomPivot(tasksMap) - }) - .add('Quick select recursion', function () { + }), + Benchmark.add('Quick select recursion', () => { quickSelectRecursion(tasksMap) - }) - .add('Quick select recursion with random pivot', function () { + }), + Benchmark.add('Quick select recursion with random pivot', () => { quickSelectRecursionRandomPivot(tasksMap) + }), + Benchmark.cycle(), + Benchmark.complete(), + Benchmark.save({ + file: 'quick-select', + format: 'json', + details: true + }), + Benchmark.save({ + file: 'quick-select', + format: 'chart.html', + details: true + }), + Benchmark.save({ + file: 'quick-select', + format: 'table.html', + details: true }) - .on('cycle', function (event) { - console.log(event.target.toString()) - }) - .on('complete', function () { - console.log( - 'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name')) - ) - // eslint-disable-next-line no-process-exit - process.exit() - }) - .run() +)