双向冒泡排序算法

119 阅读1分钟

周末考试数据结构,最后一道大题是编写一个"双向冒泡排序"算法,结果从大到小排序,所谓“双向冒泡排序”就是第一次循环将最大的冒泡到最左边,第二次循环将最小的冒泡到最右边,第三次循环将第二大的冒泡到第二个位置,第四次循环将第二小的冒泡到倒数第二个位置......直至排序完毕,下面用js实现一下;

/**
 *
 * @param {int[]} arr
 */
function sort(arr) {
    var begin = 0, end = arr.length - 1;

    var i = 0;

    while (true) {
        begin += end;
        end = begin - end;
        begin = begin - end;

        var tag = i++ % 2 === 0 ? 1 : -1;

        for (var j = begin; end != j; j -= tag) {
            var e1 = arr[j], e2 = arr[j - tag];

            if (tag * (e1 - e2) > 0) {
                arr[j] = e2;
                arr[j - tag] = e1;
            }
        }

        if (Math.abs(begin - end)  <= 1) {
            break;
        }

        end += tag;
    }
}

var arr = [5, 9, 1, 7, 6, 2, 4, 8, 0, 3];
sort(arr)

console.log(arr);

双向冒泡排序.jpg