cocktailsort
Version:
Cocktail Sort (bidirectional bubble sort)
34 lines (33 loc) • 832 B
JavaScript
const fn = (a, b) => a - b;
const swap = (arr, i, j) => {
const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
};
function sort(arr, cmpFn = fn) {
let swapped = true;
let begin = 0;
let end = arr.length;
while (swapped) {
swapped = false;
for (let i = begin; i < end - 1; ++i) {
if (cmpFn(arr[i], arr[i + 1]) > 0) {
swap(arr, i, i + 1);
swapped = true;
}
}
if (!swapped)
break;
swapped = false;
end--;
for (let i = end - 1; i >= begin; i--) {
if (cmpFn(arr[i], arr[i + 1]) > 0) {
swap(arr, i, i + 1);
swapped = true;
}
}
begin++;
}
return arr;
}
export default sort;