function b_search(a, x) {
let min = 0;
let max = a.length;
let mid = Math.floor(min + (max - min) / 2);
let prev = max;
while (mid != prev) {
if (a[mid] == x) {
return mid;
}
if (a[mid] < x) {
min = mid;
} else {
max = mid;
}
prev = mid;
mid = Math.floor(min + (max - min) / 2);
}
return -min;
}
function insert_if_absent(a, x) {
if (!a.length) {
a.push(x);
return a;
}
let i = b_search(a, x);
if (i > 0 || i == 0 && a[0] == x) {
return a;
}
if (i != 0 || a[0] < x) {
i = -i + 1;
}
if (i == a.length) {
a.push(x);
return a;
}
let y = a[i];
a[i] = x;
for (let j = i + 1; j < a.length - 1; j++) {
a[j] = y;
y = a[j + 1];
}
a.push(y);
return a;
}
let a = [-3, -1, 4, 5, 8, 9, 10, 11, 15];
console.log(b_search(a, 11));
console.log(b_search(a, 20));
console.log(b_search(a, 0));
let b = [];
insert_if_absent(b, 1);
insert_if_absent(b, 1);
insert_if_absent(b, 1);
insert_if_absent(b, 3);
insert_if_absent(b, -1);
insert_if_absent(b, 0);
insert_if_absent(b, 3);
insert_if_absent(b, 2);
console.log(b);