Comb Sort vs. Native Sort
Date tested:
8 years ago
User agent:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.41 Safari/537.36
Test name
Executions per second
Native Sort DESC
2.1 Ops/sec
Native Sort ASC
2.2 Ops/sec
Comb Sort DESC
2.1 Ops/sec
Comb Sort ASC
2.0 Ops/sec
Benchmark definition (click to collapse):
Script Preparation code:
var sampleData = []; for (var i=0; i < 100000; i++){ sampleData.push({value: (Math.floor(Math.random() * 10000))}); } var selectorFn = function(x) { return x.value; } var combSort = function (source, selectorFn, sortDirection) { var result = source.slice(); var count = result.length; var gap = count; var swapped = true; while (gap > 1 || swapped) { if (gap > 1) { gap = Math.floor(gap / 1.24733); } var i = 0; swapped = false; while ((i + gap) < count) { var item1 = result[i]; var item2 = result[i + gap]; if (shouldBeSwaped(selectorFn(item1), selectorFn(item2), selectorFn, sortDirection)) { result[i] = item2; result[i + gap] = item1; swapped = true; } i++; } } return result; } var shouldBeSwaped = function(value, valueToCompare, selectorFn, sortDirection) { var less = value > valueToCompare; return sortDirection === "asc" ? less : !less; }
Tests:
Native Sort DESC
var order = "desc"; sampleData.sort(function(a,b){ var x = selectorFn(a); var y = selectorFn(b); var res = ((x < y) ? -1 : ((x > y) ? 1 : 0)); return order === "desc" ? -1*res : res; })
Native Sort ASC
var order = "desc"; sampleData.sort(function(a,b){ var x = selectorFn(a); var y = selectorFn(b); var res = ((x < y) ? -1 : ((x > y) ? 1 : 0)); return order === "desc" ? -1*res : res; })
Comb Sort DESC
var order = "asc"; combSort(sampleData, selectorFn, order);
Comb Sort ASC
var order = "asc"; combSort(sampleData, selectorFn, order);
Open this result on MeasureThat.net