Skip to content

Instantly share code, notes, and snippets.

@jacobq
Last active August 29, 2015 14:08
Show Gist options
  • Save jacobq/53437b71261b985e6046 to your computer and use it in GitHub Desktop.
Save jacobq/53437b71261b985e6046 to your computer and use it in GitHub Desktop.
Efficient algorithms vs. functions optimized for inlining
// Just a quick & dirty demo of why it's still critical to think about efficient _algorithms_
// before thinking about tuning / optimization
var assert = require("assert");
function main() {
const trialsPerSize = 32;
var arraySizesToTest = createPowersOfTwoArray(0, 18); // 1, 2, 4, 8, ..., 262144
var algorithms = {
sort: {
description: "built-in Array.prototype.sort function",
func: sort
},
bubbleSort: {
description: "Simple but inefficient 'bubble sort' algorithm",
func: bubbleSort
},
quickSort: {
description: "Efficient but relatively complex 'quick sort' algorithm",
func: quickSort
}
};
var algorithmNames = Object.keys(algorithms);
var results = [];
arraySizesToTest.forEach(function(size) {
console.log("n = " + size);
// Generate random sample inputs and feed them to each algorithm
// repeat this multiple times in case there are input sensitivities
var result = {
size: size
};
for (var trial = 1; trial < trialsPerSize; trial++) (function() {
var items = generateRandomNumbersArray(size);
var sortedItems = items.slice().sort(compare);
algorithmNames.forEach(function(name) {
var output = time(algorithms[name].func, items.slice());
assert.deepEqual(output.result, sortedItems,
name + " algorithm did not produce expected output.\n" +
"expected = " + JSON.stringify(sortedItems) + "\n" +
"actual = " + JSON.stringify(output.result));
console.log(name + " trial finished in " + output.time + " ms");
result[name] = result[name] || {};
result[name].trials = result[name].trials || [];
result[name].trials.push(output.time);
});
}())
// Compute averages
algorithmNames.forEach(function(name) {
var total = result[name].trials.reduce(function(a, b) {
return a + b;
})
result[name].average = total / result[name].trials.length;
});
results.push(result);
});
printResults(results, ['size'].concat(algorithmNames));
};
function createPowersOfTwoArray(lowestPower, highestPower) {
var array = [];
for (var i = lowestPower; i < highestPower; i++)
array.push(Math.pow(2,i));
return array;
}
function generateRandomNumbersArray(size) {
var array = [];
var value;
for (var i=0; i < size; i++)
array.push(Math.random());
return array;
}
// (Assumes algorithm function is synchronous)
function time(algorithm, input) {
var startTime = getCurrentTimeInMs();
var result = algorithm(input);
var endTime = getCurrentTimeInMs();
var elapsedTime = endTime - startTime;
return {
time: elapsedTime,
result: result
};
}
// http://stackoverflow.com/questions/11725691/how-to-get-a-microtime-in-node-js
// Way more resolution than Date.now()
function getCurrentTimeInMs() {
var hrTime = process.hrtime()
return (hrTime[0] * 1000000 + hrTime[1] / 1000) / 1000;
}
function printResults(results, columns) {
const delimiter = ",";
console.log(JSON.stringify(results));
console.log(columns.join(delimiter));
results.forEach(function(result) {
var line = "";
columns.forEach(function(columnName) {
var field = typeof result[columnName] === "object" ?
result[columnName].average : result[columnName];
line += field + delimiter;
});
line = line.substr(0, line.length - delimiter.length); // chop off trailing delimiter
console.log(line);
});
};
// Baseline Array.prototype.sort implementation
// (algorithm unknown but assumed to be reasonable efficient)
function sort(items) {
return items.sort(compare);
}
function compare(a, b) {
return (a < b) ?
-1 : ((a > b) ?
1 : 0);
}
// http://www.stoimen.com/blog/2010/07/09/friday-algorithms-javascript-bubble-sort/
// Single function / no outside calls, ~374 characters < 600 characters
// Asymptotic runtime sucks though: O(n^3)
function bubbleSort(items) {
var swapped;
do {
swapped = false;
for (var i=0; i < items.length-1; i++) {
if (items[i] > items[i+1]) {
var temp = items[i];
items[i] = items[i+1];
items[i+1] = temp;
swapped = true;
}
}
} while (swapped);
return items;
}
// http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/
// Main function makes recursive calls as well as uses 2 other functions,
// and all have > 600 characters for illustration purposes
// Asymptotic average runtime is efficient though: O(n*lg(n))
var quickSort = (function() {
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
function quickSort(items, left, right) {
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
var index;
if (items.length > 1) {
left = typeof left != "number" ? 0 : left;
right = typeof right != "number" ? items.length - 1 : right;
index = partition(items, left, right);
if (left < index - 1) {
quickSort(items, left, index - 1);
}
if (index < right) {
quickSort(items, index, right);
}
}
return items;
}
function partition(items, left, right) {
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
var pivotIndex = Math.floor((right + left) / 2);
pivot = items[pivotIndex],
i = left,
j = right;
while (i <= j) {
while (items[i] < pivot) {
i++;
}
while (items[j] > pivot) {
j--;
}
if (i <= j) {
swap(items, i, j);
i++;
j--;
}
}
return i;
}
function swap(items, firstIndex, secondIndex){
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
// blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
var temp = items[firstIndex];
items[firstIndex] = items[secondIndex];
items[secondIndex] = temp;
}
return quickSort;
}());
main();
// Output when run on my not so awesome laptop (took about an hour):
/*
(snip)
[{"size":1,"sort":{"trials":[0.04191398620605469,0.004109025001525879,0.002053976058959961,0.0020540356636047363,0.0016439557075500488,0.0012320280075073242,0.0016440153121948242,0.0016439557075500488,0.002055048942565918,0.0016440153121948242,0.0012329816818237305,0.0016440153121948242,0.0012330412864685059,0.0016440153121948242,0.0024650096893310547,0.002465963363647461,0.0016440153121948242,0.0024660229682922363,0.0016440153121948242,0.0016439557075500488,0.0016430020332336426,0.004109025001525879,0.0020549893379211426,0.0016440153121948242,0.0028769969940185547,0.0016439557075500488,0.0016440153121948242,0.0016439557075500488,0.0016440153121948242,0.0016439557075500488,0.0024650096893310547],"average":0.0032609681929311445},"bubbleSort":{"trials":[0.0513649582862854,0.0036980509757995605,0.0012319684028625488,0.0012319684028625488,0.0016440153121948242,0.0024649500846862793,0.0016440153121948242,0.0012329816818237305,0.002053976058959961,0.0012329816818237305,0.0016439557075500488,0.0012329816818237305,0.0016440153121948242,0.0016440153121948242,0.0016430020332336426,0.0016440153121948242,0.0012320280075073242,0.0016439557075500488,0.0016430020332336426,0.0012329816818237305,0.0012330412864685059,0.0024650096893310547,0.0016440153121948242,0.0016440749168395996,0.0016439557075500488,0.0012329816818237305,0.0012319684028625488,0.0016440153121948242,0.0012329816818237305,0.0012329816818237305,0.0016440749168395996],"average":0.003221061921888782},"quickSort":{"trials":[0.051775991916656494,0.004519999027252197,0.0016440749168395996,0.0012330412864685059,0.0012329816818237305,0.0012329816818237305,0.0016440153121948242,0.001232922077178955,0.0016440153121948242,0.0016440153121948242,0.0016430020332336426,0.0016430020332336426,0.0012330412864685059,0.0016430020332336426,0.0016430020332336426,0.0016430020332336426,0.0016440749168395996,0.0016440153121948242,0.0016439557075500488,0.0016430020332336426,0.0016439557075500488,0.004519999027252197,0.0020549893379211426,0.0012330412864685059,0.0012319684028625488,0.0012330412864685059,0.0016439557075500488,0.0012329816818237305,0.0016440153121948242,0.0012320280075073242,0.0016439557075500488],"average":0.0033271312713623047}},{"size":2,"sort":{"trials":[0.0041100382804870605,0.0036980509757995605,0.0024660229682922363,0.0024650096893310547,0.002055048942565918,0.0020540356636047363,0.0028769969940185547,0.0028760433197021484,0.0020549893379211426,0.0020549893379211426,0.003697991371154785,0.00246506929397583,0.0024649500846862793,0.0032869577407836914,0.003287971019744873,0.004931032657623291,0.0024660229682922363,0.0024660229682922363,0.0016439557075500488,0.0020539164543151855,0.002055048942565918,0.0016430020332336426,0.0020549893379211426,0.0016439557075500488,0.0016440749168395996,0.0016440153121948242,0.0020549893379211426,0.0016430020332336426,0.0020549893379211426,0.0016430020332336426,0.002055048942565918],"average":0.0024390720552013765},"bubbleSort":{"trials":[0.01520395278930664,0.0020540356636047363,0.0016440153121948242,0.010273993015289307,0.0016439557075500488,0.0016440153121948242,0.0016430020332336426,0.0016439557075500488,0.0012320280075073242,0.0016430020332336426,0.0024660229682922363,0.0016440153121948242,0.0024660229682922363,0.0024650096893310547,0.0016439557075500488,0.0016430020332336426,0.0016439557075500488,0.001232922077178955,0.0016430020332336426,0.0012329816818237305,0.0016439557075500488,0.0016439557075500488,0.0012329816818237305,0.0012329816818237305,0.0016440153121948242,0.001232922077178955,0.0012330412864685059,0.002055048942565918,0.0012329816818237305,0.0016439557075500488,0.0016439557075500488],"average":0.0023595690727233887},"quickSort":{"trials":[0.1573830246925354,0.03122997283935547,0.0028769969940185547,0.002875983715057373,0.0028760433197021484,0.0024649500846862793,0.0024650096893310547,0.002875983715057373,0.0024649500846862793,0.003699004650115967,0.0032869577407836914,0.002465963363647461,0.012739002704620361,0.0032880306243896484,0.002465963363647461,0.0024650096893310547,0.0020549893379211426,0.0024660229682922363,0.0020549893379211426,0.0024649500846862793,0.0024660229682922363,0.0020549893379211426,0.002053976058959961,0.0024660229682922363,0.0020549893379211426,0.0020540356636047363,0.0024650096893310547,0.0020539164543151855,0.0024650096893310547,0.0024649500846862793,0.002053976058959961],"average":0.008761828945529076}},{"size":4,"sort":{"trials":[0.002053976058959961,0.0020540356636047363,0.0020540356636047363,0.002053976058959961,0.0020549893379211426,0.0020549893379211426,0.003697991371154785,0.0020549893379211426,0.0020549893379211426,0.0020539164543151855,0.0020549893379211426,0.0020549893379211426,0.0028760433197021484,0.0020539164543151855,0.0020549893379211426,0.0020540356636047363,0.0020539164543151855,0.0020540356636047363,0.0024649500846862793,0.0032880306243896484,0.0020549893379211426,0.0032880306243896484,0.003287076950073242,0.003697991371154785,0.0024650096893310547,0.0020549893379211426,0.0024660229682922363,0.002053976058959961,0.0016429424285888672,0.0020549893379211426,0.0020549893379211426],"average":0.002332864269133537},"bubbleSort":{"trials":[0.002055048942565918,0.0016440153121948242,0.0020549893379211426,0.0016440153121948242,0.0024660229682922363,0.0016439557075500488,0.002053976058959961,0.0016440749168395996,0.0020549893379211426,0.0016440749168395996,0.0016430020332336426,0.0020549893379211426,0.0012329816818237305,0.0016440749168395996,0.0016430020332336426,0.0016440153121948242,0.0012329816818237305,0.002465963363647461,0.002053976058959961,0.0020549893379211426,0.0016430020332336426,0.0020549893379211426,0.002875983715057373,0.0024649500846862793,0.0020549893379211426,0.0016430020332336426,0.0020540356636047363,0.0016440153121948242,0.0020540356636047363,0.0020549893379211426,0.002053976058959961],"average":0.0019088099079747354},"quickSort":{"trials":[0.01191699504852295,0.0028760433197021484,0.00287705659866333,0.0028769969940185547,0.002875983715057373,0.002875983715057373,0.003697991371154785,0.00246506929397583,0.0024650096893310547,0.0028760433197021484,0.002875983715057373,0.010683953762054443,0.002875983715057373,0.002875983715057373,0.002875983715057373,0.0028760433197021484,0.002875983715057373,0.0028760433197021484,0.0028769373893737793,0.0032869577407836914,0.0028760433197021484,0.002875983715057373,0.00739598274230957,0.004520058631896973,0.0028769969940185547,0.002875983715057373,0.002875983715057373,0.002465963363647461,0.002875983715057373,0.0028759241104125977,0.0028769969940185547],"average":0.003618546070591096}},{"size":8,"sort":{"trials":[0.00246506929397583,0.0036989450454711914,0.0024650096893310547,0.0024650096893310547,0.0024660229682922363,0.002055048942565918,0.00246506929397583,0.0024650096893310547,0.0020549893379211426,0.0024649500846862793,0.0028760433197021484,0.002465963363647461,0.0024650096893310547,0.0024650096893310547,0.0028769373893737793,0.0028760433197021484,0.0024660229682922363,0.0024650096893310547,0.0024660229682922363,0.0024649500846862793,0.0024650096893310547,0.0024660229682922363,0.0032869577407836914,0.0028769969940185547,0.0024649500846862793,0.0024660229682922363,0.002465963363647461,0.0024660229682922363,0.0028769969940185547,0.002875983715057373,0.0020540356636047363],"average":0.0025715193440837246},"bubbleSort":{"trials":[0.0028769373893737793,0.0032880306243896484,0.003287017345428467,0.0028760433197021484,0.002875983715057373,0.0032869577407836914,0.0028760433197021484,0.00287705659866333,0.0024650096893310547,0.003697991371154785,0.0032869577407836914,0.0028760433197021484,0.0024649500846862793,0.003287017345428467,0.0028760433197021484,0.003699004650115967,0.003697991371154785,0.0036980509757995605,0.0024660229682922363,0.0028760433197021484,0.0028760433197021484,0.0024649500846862793,0.003697991371154785,0.002875983715057373,0.0028769969940185547,0.0032869577407836914,0.0024660229682922363,0.0028769969940185547,0.0028769969940185547,0.0032880306243896484,0.0024660229682922363],"average":0.003022199676882836},"quickSort":{"trials":[0.00657498836517334,0.07848703861236572,0.004109025001525879,0.003697991371154785,0.004109025001525879,0.003697991371154785,0.003699064254760742,0.003699004650115967,0.003697991371154785,0.003697991371154785,0.004108905792236328,0.004521012306213379,0.004109025001525879,0.0041100382804870605,0.003697991371154785,0.006985962390899658,0.004109025001525879,0.003697991371154785,0.004109025001525879,0.004109978675842285,0.0041100382804870605,0.004110097885131836,0.004109025001525879,0.003697991371154785,0.003697991371154785,0.0041089653968811035,0.0036980509757995605,0.004109025001525879,0.003697991371154785,0.005753040313720703,0.003287971019744873],"average":0.006561588856481736}},{"size":16,"sort":{"trials":[0.01561504602432251,0.0036989450454711914,0.003697991371154785,0.01191699504852295,0.003287971019744873,0.003287017345428467,0.008629024028778076,0.003699004650115967,0.0036980509757995605,0.0041089653968811035,0.004109025001525879,0.004519999027252197,0.0041089653968811035,0.0032880306243896484,0.003287971019744873,0.0041089653968811035,0.003697991371154785,0.0032880306243896484,0.0032869577407836914,0.003287017345428467,0.003287971019744873,0.003287076950073242,0.002875983715057373,0.0032869577407836914,0.0032880306243896484,0.0032869577407836914,0.0032880306243896484,0.0032880306243896484,0.00287705659866333,0.003697991371154785,0.004519999027252197],"average":0.004374388725526871},"bubbleSort":{"trials":[0.0061640143394470215,0.0073969364166259766,0.006986021995544434,0.008629024028778076,0.006574034690856934,0.008217990398406982,0.00904005765914917,0.0086289644241333,0.006985008716583252,0.008219003677368164,0.00904005765914917,0.007808029651641846,0.008629977703094482,0.006985962390899658,0.01520395278930664,0.0090409517288208,0.00821906328201294,0.0102730393409729,0.007807016372680664,0.007808089256286621,0.00657498836517334,0.007396042346954346,0.007396996021270752,0.006574034690856934,0.008219003677368164,0.007807016372680664,0.007396996021270752,0.007806956768035889,0.006986021995544434,0.008218050003051758,0.009039998054504395],"average":0.008099138736724854},"quickSort":{"trials":[0.06944608688354492,0.11423593759536743,0.005342066287994385,0.005342066287994385,0.005752980709075928,0.006985962390899658,0.005752980709075928,0.005342006683349609,0.0061640143394470215,0.005751967430114746,0.004930973052978516,0.005753040313720703,0.005342006683349609,0.005342006683349609,0.005342006683349609,0.0057530999183654785,0.005341947078704834,0.005341947078704834,0.007396996021270752,0.004931986331939697,0.00493091344833374,0.004930973052978516,0.005342066287994385,0.005342006683349609,0.005342006683349609,0.005342006683349609,0.004930973052978516,0.004931032657623291,0.004930973052978516,0.005341947078704834,0.004931032657623291],"average":0.01102864550006005}},{"size":32,"sort":{"trials":[0.005753040313720703,0.005342006683349609,0.005753040313720703,0.005752980709075928,0.007396996021270752,0.0061629414558410645,0.0102730393409729,0.004519999027252197,0.004109025001525879,0.0041089653968811035,0.0041100382804870605,0.004930973052978516,0.004520058631896973,0.004109978675842285,0.004931032657623291,0.004520058631896973,0.004519999027252197,0.005341947078704834,0.004108905792236328,0.004520058631896973,0.004931032657623291,0.004519999027252197,0.007397055625915527,0.007396042346954346,0.005341947078704834,0.004519999027252197,0.004109025001525879,0.004519999027252197,0.004519999027252197,0.005342006683349609,0.00657498836517334],"average":0.005288941244925222},"bubbleSort":{"trials":[0.15122002363204956,0.01314997673034668,0.005752980709075928,0.0057520270347595215,0.004931032657623291,0.005342006683349609,0.00657498836517334,0.0061640143394470215,0.004931032657623291,0.005752980709075928,0.005342066287994385,0.005753040313720703,0.005342006683349609,0.004519999027252197,0.0061629414558410645,0.005752980709075928,0.004931032657623291,0.004930973052978516,0.005752980709075928,0.005342066287994385,0.004930973052978516,0.005341947078704834,0.008629024028778076,0.005752980709075928,0.005342006683349609,0.005342006683349609,0.012739002704620361,0.005753040313720703,0.006163954734802246,0.004931986331939697,0.006985962390899658],"average":0.010816581787601594},"quickSort":{"trials":[0.011094987392425537,0.00903993844985962,0.14176803827285767,0.005342006683349609,0.004930973052978516,0.00657498836517334,0.006574034690856934,0.004519999027252197,0.004520058631896973,0.004109025001525879,0.004109978675842285,0.004521012306213379,0.004519999027252197,0.005752980709075928,0.005342006683349609,0.004519939422607422,0.004520058631896973,0.004519999027252197,0.0041089653968811035,0.005342006683349609,0.004519999027252197,0.00780797004699707,0.0069849491119384766,0.004521012306213379,0.004519999027252197,0.004520058631896973,0.004519999027252197,0.004931032657623291,0.005341947078704834,0.005752980709075928,0.0061640143394470215],"average":0.009848869615985502}},{"size":64,"sort":{"trials":[0.013560056686401367,0.009039998054504395,0.009041011333465576,0.008629024028778076,0.012738943099975586,0.013561010360717773,0.012328028678894043,0.00904005765914917,0.009041011333465576,0.00903993844985962,0.008218050003051758,0.010683953762054443,0.008629024028778076,0.00903993844985962,0.008629024028778076,0.012328028678894043,0.013561010360717773,0.014383018016815186,0.016436994075775146,0.013560950756072998,0.014793038368225098,0.013971030712127686,0.013149023056030273,0.016847968101501465,0.019725024700164795,0.01931297779083252,0.009450972080230713,0.0086289644241333,0.009041011333465576,0.008217990398406982,0.008217990398406982],"average":0.011704679458372055},"bubbleSort":{"trials":[0.022601008415222168,0.017669975757598877,0.016026020050048828,0.01849198341369629,0.02301102876663208,0.03081899881362915,0.02465599775314331,0.017670035362243652,0.017669975757598877,0.016436994075775146,0.015205025672912598,0.01438295841217041,0.01807999610900879,0.01766902208328247,0.030818939208984375,0.02876502275466919,0.02547699213027954,0.024244070053100586,0.02301102876663208,0.022189974784851074,0.02588796615600586,0.023423075675964355,0.024243950843811035,0.0193139910697937,0.02465599775314331,0.025888025760650635,0.016026020050048828,0.017258942127227783,0.01766902208328247,0.016847968101501465,0.013971030712127686],"average":0.02097035607983989},"quickSort":{"trials":[0.008217990398406982,0.008219003677368164,0.009861946105957031,0.008218050003051758,0.011094927787780762,0.011505961418151855,0.012327969074249268,0.008629024028778076,0.007808029651641846,0.00904005765914917,0.008630037307739258,0.008219003677368164,0.007807016372680664,0.008217990398406982,0.011094987392425537,0.012739062309265137,0.012739002704620361,0.013561010360717773,0.012328028678894043,0.01191699504852295,0.022600948810577393,0.013561069965362549,0.01191699504852295,0.011095046997070312,0.013559997081756592,0.012739002704620361,0.008629024028778076,0.008629024028778076,0.009451091289520264,0.00780797004699707,0.008219003677368164],"average":0.010657589281758955}},{"size":128,"sort":{"trials":[0.017257988452911377,0.017259061336517334,0.016436994075775146,0.016847968101501465,0.01725900173187256,0.016026020050048828,0.01725900173187256,0.02958601713180542,0.016436994075775146,0.01643693447113037,0.01725900173187256,0.01684802770614624,0.017668962478637695,0.017257988452911377,0.016847968101501465,0.01684701442718506,0.01684802770614624,0.016026020050048828,0.017669975757598877,0.019724011421203613,0.016436994075775146,0.01725900173187256,0.01807999610900879,0.017669975757598877,0.017669975757598877,0.016437053680419922,0.01684802770614624,0.017669975757598877,0.016846954822540283,0.01684802770614624,0.01684802770614624],"average":0.017497322251719814},"bubbleSort":{"trials":[0.06246000528335571,0.0587620735168457,0.058350980281829834,0.06328201293945312,0.05876201391220093,0.05383002758026123,0.05547499656677246,0.060816943645477295,0.07519900798797607,0.06163901090621948,0.05383098125457764,0.06328201293945312,0.06492602825164795,0.05424201488494873,0.059172987937927246,0.05958402156829834,0.05999398231506348,0.06698000431060791,0.08506101369857788,0.056707024574279785,0.0579410195350647,0.06246006488800049,0.07766497135162354,0.05259805917739868,0.051775991916656494,0.06328195333480835,0.06122696399688721,0.06122791767120361,0.059172987937927246,0.05752897262573242,0.0575290322303772],"average":0.061121454161982385},"quickSort":{"trials":[0.027943015098571777,0.016436994075775146,0.016026020050048828,0.015614986419677734,0.01520395278930664,0.01725900173187256,0.014792978763580322,0.015614986419677734,0.015614986419677734,0.015204012393951416,0.015614986419677734,0.015205025672912598,0.015614986419677734,0.016026020050048828,0.01561594009399414,0.015614986419677734,0.015614986419677734,0.023422956466674805,0.019313931465148926,0.01643693447113037,0.015614986419677734,0.016025960445404053,0.015614986419677734,0.01561504602432251,0.01643693447113037,0.02588796615600586,0.015615999698638916,0.016026020050048828,0.015616059303283691,0.016026020050048828,0.016026020050048828],"average":0.016861215714485414}},{"size":256,"sort":{"trials":[0.03575003147125244,0.03780496120452881,0.038627028465270996,0.0620499849319458,0.041091978549957275,0.038627028465270996,0.03698301315307617,0.036160945892333984,0.0620499849319458,0.0365719199180603,0.0382159948348999,0.03575098514556885,0.037805020809173584,0.040270984172821045,0.03739500045776367,0.04068100452423096,0.03534001111984253,0.034928977489471436,0.03575003147125244,0.037394046783447266,0.03780496120452881,0.0365719199180603,0.03739398717880249,0.03657197952270508,0.042735934257507324,0.04191398620605469,0.03657197952270508,0.03739398717880249,0.0472559928894043,0.03616100549697876,0.03862696886062622],"average":0.039621020517041604},"bubbleSort":{"trials":[0.22765201330184937,0.2564159631729126,0.23751300573349,0.23422592878341675,0.24614304304122925,0.2551840543746948,0.2136799693107605,0.23093891143798828,0.30695998668670654,0.22600692510604858,0.26833295822143555,0.2346380352973938,0.22559595108032227,0.22189801931381226,0.24532103538513184,0.22436392307281494,0.21820002794265747,0.23833495378494263,0.2235429883003235,0.21326899528503418,0.20587295293807983,0.23217201232910156,0.22025495767593384,0.22847402095794678,0.22107696533203125,0.2473759651184082,0.23956799507141113,0.23093807697296143,0.229295015335083,0.23217201232910156,0.2284730076789856],"average":0.23431902162490353},"quickSort":{"trials":[0.03287392854690552,0.03451794385910034,0.036982953548431396,0.03533905744552612,0.03451800346374512,0.03328496217727661,0.03205198049545288,0.03164100646972656,0.035749971866607666,0.032463014125823975,0.04355806112289429,0.03328502178192139,0.0324629545211792,0.03205198049545288,0.03164100646972656,0.03287404775619507,0.0324629545211792,0.03287398815155029,0.03164100646972656,0.03246200084686279,0.03205198049545288,0.032463014125823975,0.032052040100097656,0.032463014125823975,0.03164106607437134,0.032463014125823975,0.03164094686508179,0.03328496217727661,0.032052040100097656,0.032052040100097656,0.03287398815155029],"average":0.033218514534734914}},{"size":512,"sort":{"trials":[0.08012998104095459,0.0854719877243042,0.09040302038192749,0.08629399538040161,0.08300703763961792,0.10314100980758667,0.08218395709991455,0.08218502998352051,0.08218502998352051,0.10232001543045044,0.0854719877243042,0.08423900604248047,0.10519695281982422,0.0867050290107727,0.13231700658798218,0.08752703666687012,0.08875995874404907,0.08834803104400635,0.16601300239562988,0.14546704292297363,0.09040296077728271,0.08876001834869385,0.0867050290107727,0.13642603158950806,0.08588302135467529,0.09204697608947754,0.08917105197906494,0.0854719877243042,0.08588296175003052,0.08095204830169678,0.08177399635314941],"average":0.09518845811966926},"bubbleSort":{"trials":[0.928276002407074,0.969368040561676,1.0273090600967407,0.9788200259208679,0.904030978679657,0.8769099712371826,0.9027990102767944,0.9073190093040466,0.9064969420433044,0.8538990616798401,0.9853939414024353,1.1304500699043274,0.9410150051116943,1.1489420533180237,0.9352619647979736,0.9352609515190125,0.951287031173706,1.3001610040664673,0.9475889801979065,1.4994589686393738,0.9348510503768921,0.9418359994888306,1.4353549480438232,1.2635889649391174,0.979231059551239,0.9455349445343018,1.1567489504814148,0.9369059801101685,0.9122500419616699,0.8769109845161438,0.9286870360374451],"average":1.01103058168965},"quickSort":{"trials":[0.09820997714996338,0.07191205024719238,0.07314503192901611,0.06862401962280273,0.06903499364852905,0.0678030252456665,0.06821304559707642,0.06821304559707642,0.06821298599243164,0.08054089546203613,0.06903499364852905,0.07355499267578125,0.07067900896072388,0.08752697706222534,0.07232195138931274,0.07108902931213379,0.07191199064254761,0.07643204927444458,0.10314202308654785,0.07273399829864502,0.0723230242729187,0.07314491271972656,0.09903299808502197,0.07396602630615234,0.07026702165603638,0.09286797046661377,0.07478797435760498,0.0710899829864502,0.06821298599243164,0.06739199161529541,0.06903499364852905],"average":0.07530503119191816}},{"size":1024,"sort":{"trials":[0.24860799312591553,0.20340698957443237,0.19272297620773315,0.18779206275939941,0.19272303581237793,0.20504999160766602,0.2009420394897461,0.2153240442276001,0.18573707342147827,0.20381802320480347,0.20546197891235352,0.34640800952911377,0.2136799693107605,0.21614491939544678,0.20710593461990356,0.2103930115699768,0.21244698762893677,0.2058720588684082,0.21244800090789795,0.22231000661849976,0.1992979645729065,0.19642090797424316,0.20381808280944824,0.2001199722290039,0.20052993297576904,0.2034069299697876,0.20957106351852417,0.21080297231674194,0.20422899723052979,0.18820303678512573,0.19354498386383057],"average":0.20962386938833422},"bubbleSort":{"trials":[3.6884480118751526,3.7348820567131042,3.7915890216827393,3.7911790013313293,3.750496983528137,3.964177966117859,3.839257001876831,3.9547260403633118,3.7874799966812134,3.8400790691375732,9.475070059299469,4.05622398853302,3.914043962955475,4.056224048137665,4.081290006637573,4.916287004947662,5.29022604227066,4.020062983036041,3.9300700426101685,3.916098952293396,3.9736289978027344,3.995818078517914,3.9847229719161987,3.9354130625724792,3.8865129947662354,3.891855001449585,3.8367910385131836,3.6859819889068604,3.8265179991722107,3.70940500497818,3.9378780126571655],"average":4.143949593267133},"quickSort":{"trials":[0.15409600734710693,0.14423400163650513,0.14382404088974,0.14423400163650513,0.1528630256652832,0.15286308526992798,0.16971099376678467,0.14546698331832886,0.15532904863357544,0.15779399871826172,0.15450698137283325,0.1569730043411255,0.15409702062606812,0.1516299843788147,0.15573996305465698,0.15532898902893066,0.21285796165466309,0.15204203128814697,0.15245205163955688,0.15286296606063843,0.1516299843788147,0.1602599024772644,0.15861600637435913,0.15080899000167847,0.15409696102142334,0.15286391973495483,0.14135795831680298,0.14423400163650513,0.14259105920791626,0.1421789526939392,0.14217901229858398],"average":0.1535394480151515}},{"size":2048,"sort":{"trials":[1.3252280354499817,0.6435059905052185,0.43681198358535767,0.4109230041503906,0.45119398832321167,0.4520159363746643,0.5395420789718628,0.5300909876823425,0.5358439683914185,0.5050250291824341,0.5079019665718079,0.457768976688385,0.4187309741973877,0.45119398832321167,0.45571404695510864,0.47009599208831787,0.45858997106552124,0.4437979459762573,0.48735499382019043,0.4520159959793091,0.42489492893218994,0.8912920355796814,1.2475630044937134,0.41749799251556396,0.41667699813842773,0.42284005880355835,0.44585198163986206,0.43968796730041504,0.44009900093078613,0.6669290065765381,0.447907030582428],"average":0.538535027734695},"bubbleSort":{"trials":[20.247835993766785,19.077115952968597,16.316942989826202,23.28045004606247,18.271294951438904,16.883607029914856,20.615611970424652,19.552964985370636,21.79290807247162,21.320757031440735,17.070987939834595,16.73731905221939,16.515829980373383,16.788684010505676,16.4804909825325,16.29804104566574,17.001130998134613,16.88648295402527,17.02784103155136,16.231061041355133,16.55117005109787,16.16983300447464,16.872923016548157,16.181749045848846,16.29228800535202,16.27708399295807,16.20229595899582,16.659653961658478,16.993323028087616,17.23001503944397,16.12832897901535],"average":17.611484585269803},"quickSort":{"trials":[0.4503709673881531,0.37681692838668823,0.2999740242958069,0.3192879557609558,0.32134193181991577,0.3242189884185791,0.36736494302749634,0.5568009614944458,0.35421597957611084,0.43557894229888916,0.3192870020866394,0.3192879557609558,0.33038198947906494,0.30613797903060913,0.30695903301239014,0.31682199239730835,0.3242180347442627,0.3270949721336365,0.32504093647003174,0.3057270050048828,0.3303830027580261,0.32668405771255493,0.3053160309791565,0.32093095779418945,0.3196980357170105,0.3036729693412781,0.302029013633728,0.47009599208831787,0.33120399713516235,0.32586199045181274,0.29791897535324097],"average":0.3426039853403645}},{"size":4096,"sort":{"trials":[0.9484109878540039,0.9500550031661987,0.9697789549827576,0.9940239787101746,1.6091760396957397,1.0174469947814941,0.9455350637435913,1.0322389602661133,0.938137948513031,0.9977219700813293,1.084426999092102,0.970600962638855,0.9932010173797607,1.0564839243888855,1.1641459465026855,1.155515968799591,0.9833399653434753,0.9360830187797546,0.9849830269813538,0.9623820185661316,0.9533420205116272,1.064702033996582,0.9385489821434021,0.9340279698371887,0.9438910484313965,0.9669029116630554,0.9800519943237305,1.1177120804786682,0.9771759510040283,0.9784089922904968,0.9311529994010925],"average":1.0154711527209128},"bubbleSort":{"trials":[68.25148797035217,70.3977410197258,67.78221398591995,78.17610800266266,80.48837399482727,69.78957504034042,67.10706597566605,68.70432597398758,68.936085999012,68.50543904304504,67.61250299215317,67.29239296913147,68.23422998189926,66.93119096755981,75.47716397047043,75.76727694272995,69.27016800642014,67.3523879647255,67.96260899305344,67.66921001672745,69.21756905317307,67.91905200481415,70.06037294864655,67.90056002140045,67.16582798957825,65.63102996349335,77.43521398305893,74.81927597522736,68.12862199544907,65.85868096351624,69.67616003751755],"average":69.85548112084788},"quickSort":{"trials":[0.6619979739189148,0.656654953956604,0.6817219853401184,1.0042960047721863,0.701445996761322,0.6854199767112732,0.6496700644493103,0.6813109517097473,0.6718599796295166,0.6899400353431702,0.6866529583930969,0.6743259429931641,0.6587100028991699,0.6389849781990051,0.8234900236129761,0.6825439929962158,0.6689830422401428,0.6924059987068176,0.6665180325508118,0.812394917011261,0.7026789784431458,0.6430950164794922,0.6632300615310669,0.6706269383430481,0.6924059987068176,0.6961039900779724,0.9952569603919983,0.6800780296325684,0.6640520095825195,0.6636409759521484,0.6780239939689636],"average":0.7044684117840182}},{"size":8192,"sort":{"trials":[2.195564031600952,2.6533320546150208,2.684150993824005,2.083791971206665,2.04352205991745,2.130638003349304,2.0669440627098083,2.037768006324768,2.0217429995536804,2.1980289816856384,2.234189987182617,2.031604051589966,2.144609034061432,2.049685001373291,2.062013030052185,2.148717999458313,2.031193971633911,2.158990979194641,2.0566710233688354,2.144608974456787,2.131048023700714,2.1548819541931152,2.112146019935608,2.2407649755477905,2.061601996421814,2.1902220249176025,2.0989970564842224,2.102283000946045,2.199672043323517,2.1318699717521667,2.0229750275611877],"average":2.149168687482034},"bubbleSort":{"trials":[284.1966279745102,281.370709002018,297.2697430253029,279.6493510007858,275.52409195899963,282.15516102313995,279.2659600377083,278.6019079685211,276.2695070505142,273.87669998407364,298.6048330068588,281.2930439710617,280.0097309947014,275.18302500247955,278.0340119600296,274.07928508520126,274.34597504138947,278.02168399095535,282.32692700624466,274.16598999500275,287.3266310095787,273.77766793966293,275.7702350616455,276.8443880081177,280.1260219812393,273.0901920199394,276.66563606262207,282.91126000881195,275.12220895290375,279.7676959633827,280.0331540107727],"average":279.5380437451024},"quickSort":{"trials":[1.4789130091667175,1.7041000723838806,1.3938519954681396,1.877096951007843,1.4538469910621643,1.4711049795150757,1.3942630290985107,1.3778259754180908,1.461655080318451,1.4567240476608276,1.3835790157318115,1.4460390210151672,1.467406988143921,1.3876879811286926,1.449737012386322,1.4928849935531616,1.3905649781227112,1.5093219876289368,1.414808988571167,1.3811140060424805,1.4682289958000183,1.4398750066757202,1.3757710456848145,1.4012490510940552,1.475214958190918,1.4012479782104492,1.4074119925498962,1.384399950504303,1.4620659351348877,1.3876879811286926,1.3675529956817627],"average":1.450426870776761}},{"size":16384,"sort":{"trials":[4.750684022903442,4.478241980075836,4.656993985176086,4.804925978183746,4.5476890206336975,4.513992965221405,7.685088038444519,5.566367983818054,11.900339007377625,5.244614958763123,4.743288040161133,4.5291969776153564,4.477009952068329,5.044083952903748,4.445369064807892,4.580972969532013,4.741644024848938,7.043224930763245,9.27248501777649,5.729092955589294,4.544401049613953,5.504728019237518,4.816842973232269,4.831636011600494,4.634804010391235,4.655761003494263,8.068068981170654,6.03399795293808,5.927568972110748,8.319142937660217,4.874371945858002],"average":5.644084828515207},"bubbleSort":{"trials":[1126.1370249390602,1113.9223289489746,1112.47998803854,1166.3577889800072,1157.0080510377884,1129.6343929767609,1177.9495249986649,1394.046296954155,1224.6484959721565,1207.9280260205269,1127.0665329694748,1136.6278970241547,1130.2528330087662,1145.8157320022583,1124.6659200191498,1265.9919030070305,1283.4027250409126,1365.0433280467987,1266.8782650232315,1162.8267259597778,1123.5773829817772,1123.7894199490547,1198.5413039922714,1164.2998849749565,1230.9109680652618,1323.3814550042152,1321.6177719831467,1486.6717019677162,1257.2519749999046,1173.440052986145,1288.212992966175],"average":1210.01221583351},"quickSort":{"trials":[3.1998599767684937,2.945497989654541,3.029737949371338,3.056447982788086,2.9705640077590942,2.998508036136627,3.274237036705017,4.7342469692230225,3.08891099691391,3.3173839449882507,3.097130000591278,3.0613790154457092,3.095074951648712,3.061379075050354,2.9257739782333374,3.6600939631462097,3.101648986339569,3.2565680742263794,3.158766984939575,3.024807035923004,3.088499963283539,3.134112000465393,3.113565981388092,2.9298830032348633,3.187943935394287,4.696442008018494,3.7817270755767822,3.941166043281555,4.997238993644714,3.202736973762512,3.135756015777588],"average":3.3311964177316233}},{"size":32768,"sort":{"trials":[10.38937395811081,18.058436930179596,16.148054003715515,10.615382015705109,15.945879995822906,33.40395796298981,16.89429098367691,18.605785965919495,16.453369975090027,17.038113951683044,17.35904496908188,17.759284019470215,16.906617999076843,19.895263016223907,20.15167999267578,17.317542016506195,16.734442055225372,18.557708024978638,18.0436429977417,17.24110996723175,16.772246062755585,18.514972031116486,31.327562034130096,17.34178590774536,18.081037044525146,20.2552330493927,16.888127028942108,17.3717839717865,17.263710021972656,17.76955795288086,20.035799026489258],"average":18.23034822364007},"bubbleSort":{"trials":[5027.143952012062,5348.815555036068,5134.099074959755,4599.005812048912,5157.746068954468,5323.4352860450745,4733.225288033485,4730.931924045086,4572.800819993019,4648.936694025993,4974.463991999626,5240.139483988285,4999.31827801466,4822.347572982311,4959.131210029125,4881.433004081249,5248.303296983242,5167.335786998272,5244.293507993221,4954.177117943764,4902.659659981728,4854.991320967674,5048.791392028332,5138.430207014084,4978.340231955051,4739.242439031601,4768.817822992802,4633.747735977173,4697.687816083431,4647.242869019508,4834.852380037308],"average":4935.867341976012},"quickSort":{"trials":[6.619563937187195,7.1245880126953125,20.9340780377388,6.142071008682251,9.329604029655457,6.416155993938446,6.180286943912506,6.817628979682922,7.590575993061066,6.863652050495148,6.4860129952430725,9.492329001426697,7.205130040645599,12.948605000972748,6.361503958702087,6.331916987895966,8.036839008331299,7.756588995456696,6.963918030261993,6.435880959033966,6.29904305934906,7.282382965087891,6.548063039779663,8.238600969314575,7.628381013870239,6.246855974197388,6.589565932750702,6.38205099105835,6.454371929168701,6.554637968540192,9.171808004379272],"average":7.723635219758557}},{"size":65536,"sort":{"trials":[54.63020205497742,36.79325294494629,53.1689590215683,60.01864004135132,40.06789994239807,70.72730106115341,36.646142065525055,38.65555799007416,45.31169295310974,70.26829999685287,56.80152100324631,36.39753395318985,58.94777399301529,41.57804399728775,37.543187975883484,37.467167019844055,39.32906001806259,37.65043896436691,36.806403040885925,38.345722019672394,37.09528195858002,37.20499795675278,37.895759999752045,38.42297500371933,37.66646498441696,38.55899000167847,37.68043702840805,39.35453796386719,37.38292795419693,37.73262405395508,37.494699001312256],"average":43.34337083755001},"bubbleSort":{"trials":[19072.40469098091,18960.664364993572,19449.471634984016,18883.979496002197,20873.816952049732,20078.298974990845,19777.006702899933,18615.372066020966,18965.50997298956,19740.781346023083,18534.116498053074,18979.57546699047,19035.57404398918,19752.673467040062,20631.31671398878,19669.1660400033,18549.23683297634,18373.579849004745,18627.019688010216,18218.407393038273,18479.68025201559,18528.338916003704,18276.632351994514,18118.004852950573,18284.522080004215,18263.115440011024,18264.974457025528,18254.96477597952,18261.335729956627,18196.428336024284,18283.37847995758],"average":18903.20476990169},"quickSort":{"trials":[13.67059701681137,18.1751389503479,13.512802958488464,13.835376977920532,16.24873000383377,14.312460005283356,13.8887979388237,13.052157044410706,20.52192199230194,14.922680020332336,13.242415010929108,17.09071296453476,14.163293957710266,13.518555998802185,13.784012019634247,13.304463982582092,13.087086021900177,12.995860993862152,13.46965605020523,13.639778017997742,13.285561919212341,13.27405595779419,13.61717700958252,13.554717063903809,13.944271981716156,13.741686940193176,13.740454971790314,13.351720929145813,13.638545989990234,13.76141095161438,14.422175943851471],"average":14.218331535016336}},{"size":131072,"sort":{"trials":[84.56678801774979,83.32251304388046,79.3135449886322,83.66686594486237,78.83728402853012,87.04876500368118,86.39704102277756,83.19389301538467,87.39353001117706,111.42473703622818,87.0615040063858,96.58013105392456,96.66807001829147,108.32719701528549,103.07395303249359,105.8349460363388,104.3745259642601,89.57060199975967,89.85372793674469,80.89806401729584,121.92916995286942,95.27873802185059,95.61898195743561,82.69297802448273,104.05236095190048,95.14970803260803,134.25358200073242,88.94065696001053,87.6556990146637,86.38389098644257,92.49801898002625],"average":93.93101509924858},"bubbleSort":{"trials":[73066.90489298105,72941.68998003006,72961.12254399061,73319.68889904022,73900.96049302816,78685.75172698498,75116.04433697462,75101.50751298666,80231.21011996269,77736.79374700785,75593.48957794905,80764.36382496357,84136.07602703571,82555.66572904587,82551.64402204752,81967.64060997963,80465.84734100103,75378.64817798138,76382.0925359726,77986.40665602684,80376.23811203241,78237.26671898365,76660.22516995668,77484.07795405388,79906.76231896877,78260.91741096973,79417.74136799574,80077.12209099531,75462.83157402277,76247.91415303946,79950.26430594921],"average":77836.28741715993},"quickSort":{"trials":[28.649574995040894,27.778416991233826,28.350010991096497,28.245224952697754,37.62496101856232,30.515166997909546,28.289606034755707,27.67486399412155,34.57673305273056,27.909090995788574,31.436045050621033,31.115936040878296,31.93326300382614,28.70669198036194,30.03931701183319,29.121315002441406,40.325960993766785,29.27171301841736,28.74942797422409,35.449123084545135,29.037897050380707,36.05276906490326,29.514979004859924,33.004128992557526,29.30376499891281,32.463353991508484,27.99538403749466,28.97461497783661,28.445756018161774,27.90046101808548,34.69918704032898],"average":30.74692707677041}}]
size,sort,bubbleSort,quickSort
1,0.0032609681929311445,0.003221061921888782,0.0033271312713623047
2,0.0024390720552013765,0.0023595690727233887,0.008761828945529076
4,0.002332864269133537,0.0019088099079747354,0.003618546070591096
8,0.0025715193440837246,0.003022199676882836,0.006561588856481736
16,0.004374388725526871,0.008099138736724854,0.01102864550006005
32,0.005288941244925222,0.010816581787601594,0.009848869615985502
64,0.011704679458372055,0.02097035607983989,0.010657589281758955
128,0.017497322251719814,0.061121454161982385,0.016861215714485414
256,0.039621020517041604,0.23431902162490353,0.033218514534734914
512,0.09518845811966926,1.01103058168965,0.07530503119191816
1024,0.20962386938833422,4.143949593267133,0.1535394480151515
2048,0.538535027734695,17.611484585269803,0.3426039853403645
4096,1.0154711527209128,69.85548112084788,0.7044684117840182
8192,2.149168687482034,279.5380437451024,1.450426870776761
16384,5.644084828515207,1210.01221583351,3.3311964177316233
32768,18.23034822364007,4935.867341976012,7.723635219758557
65536,43.34337083755001,18903.20476990169,14.218331535016336
131072,93.93101509924858,77836.28741715993,30.74692707677041
*/
<img src="http://i.imgur.com/bsSvnDV.png">
@jacobq
Copy link
Author

jacobq commented Oct 29, 2014

Might have a bug with not cloning the input array; will check tonight but didn't want to miss the 1:35 session.

@jacobq
Copy link
Author

jacobq commented Oct 30, 2014

Just for fun I updated the code to clone the array before running so that all algorithms get the same input and ran multiple trials for each size. Of course this makes it take a lot longer to run, but the results are a bit more meaningful as it helps even out input sensitivities and outside system load (since the timing done here is the coarse "wall clock" method).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment