UNPKG

cocktailsort

Version:

Cocktail Sort (bidirectional bubble sort)

34 lines (33 loc) 832 B
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;