supersortjs
Version:
Cocktail sort with using compare context function
45 lines (42 loc) • 1.2 kB
JavaScript
const sort = (arr, compare, context) => {
let left = firstSwap = 0
let right = lastSwap = arr.length - 1
while (left < right) {
for (let i = left; i < right; i++) {
if (compare.apply(context, [arr[i], arr[i + 1]]) === -1) {
[], arr[i + 1]] = [arr[i + 1], arr[i]]
lastSwap = i;
}
}
right = lastSwap;
for (let i = right; i > left; i--) {
if (compare.apply(context, [arr[i], arr[i - 1]]) === 1) {
[], arr[i - 1]] = [arr[i - 1], arr[i]]
firstSwap = i;
}
}
left = firstSwap;
}
return arr;
}
// Tests
//
// const obj1 = {field : 3,}
// const obj2 = {field : 1,}
// const obj3 = {field : 3,}
// const obj4 = {field : -13}
//
// const array = [obj1,obj2,obj3,obj4]
// const context = {
// compareObjectField: function (value1, value2) {
// if (value1.field > value2.field) return -1
// if (value2.field < value1.field) return 1
// if (value2.field === value1.field) return 1
// }
// }
// const sorted = sort(array, function (v1,v2) {
// return this.compareObjectField(v1,v2)
// }, context)
//
// console.log(sorted);
module.exports.sort = sort