Cần viết hàm JavaScript nhận mảng số đã sắp xếp làm đối số đầu tiên và một số đơn làm đối số thứ hai. Hàm chèn số thứ hai vào mảng mà không làm mất trật tự sắp xếp. Yêu cầu không tạo mảng mới.
Ví dụ
const arr = [6, 7, 8, 9, 12, 14, 16, 17, 19, 20, 22];
const num = 15;
const findIndex = (arr, val) => {
let low = 0, high = arr.length;
while (low < high) {
let mid = (low + high) >>> 1;
if (arr[mid] < val) {
low = mid + 1;
}else {
high = mid
}
};
return low;
};
const insertAt = (arr = [], num) => {
const position = findIndex(arr, num);
for(let i = position; typeof arr[i] !== 'undefined'; i++){
// hoán đổi không dùng biến thứ ba
num += arr[i];
arr[i] = num - arr[i];
num -= arr[i];
};
arr.push(num);
};
insertAt(arr, num);
console.log(arr);
Kết quả
Điều này sẽ tạo ra đầu ra sau:
[
6, 7, 8, 9, 12,
14, 15, 16, 17, 19,
20, 22
]