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