【发布时间】:2015-02-03 06:58:03
【问题描述】:
要求是从一个空数组开始,向其中插入元素,一次一个,但保持数组按升序排序。它的一个用途是找到一组周期性输入的运行中位数。我尝试过简单地推送一个元素,然后调用内置的排序方法,但似乎(根据其他人在 jsPerf 上所做的一些基准测试)会因大量元素而减慢速度。
允许重复(尽管一个简单的技巧也可以让我禁止它们)。
function binaryInsert(x, array) {
var l = 0,
r = array.length - 1,
m;
while (l <= r) {
m = (l + r) / 2 | 0;
if (array[m] > x) {
r = m - 1;
continue;
}
l = m + 1;
if (array[m] === x) {
break; // change to return to avoid duplicates
}
}
array.splice(l, 0, x);
}
我确实看过this,但这似乎是在进行递归搜索,如果没有尾调用优化,这似乎不是最优的。
另外,最后的拼接有什么替代品吗?
【问题讨论】:
-
这可能会让您感兴趣 - stackoverflow.com/questions/25109518/…
标签: javascript arrays sorting insertion-sort