bubbleSort

by alekskorovin

JavaScript

(function () {
    "use strict";

    function defaultDifference(a, b) {
        return a - b;
    }

    function bubbleSort(numbers, difference) {
        difference = difference || defaultDifference;

        for (var itemIndex = 0; itemIndex < numbers.length; itemIndex += 1) {
            for (var currentIndex = itemIndex; currentIndex > 0; currentIndex -= 1) {
                
                var previousIndex = currentIndex - 1,
                    currentItem = numbers[currentIndex],
                    previousItem = numbers[previousIndex],
                    currentIsLessThanPrevious = difference(currentItem, previousItem) < 0;
                
                if (currentIsLessThanPrevious) {
                    numbers[currentIndex] = previousItem;
                    numbers[previousIndex] = currentItem;
                }
            }
        }
        return numbers;
    }

    console.log(bubbleSort([4, 6, 2, 10, 1]));

})();