arr = [1,2,5,8,9,10,20,30,40] 有一个从小到大排序好的数组,现在输入一个数,要求按照原来的规律插入到数组中
var arr = [1, 2, 5, 8, 9, 10, 20, 30, 40]; var num = 15; var left = 0, right = arr.length - 1; while (left <= right) { var mid = Math.floor((left + right) / 2); if (arr[mid] === num) { arr.splice(mid, 0, num); break; } else if (arr[mid] < num) { left = mid + 1; } else { right = mid - 1; } } if (left > right) { arr.splice(left, 0, num); } console.log(arr);
这段代码的含义是:首先定义了一个已排序的数组arr和一个需要插入的数num。然后使用二分查找算法,找到num应该插入的位置。如果数组中已经存在num,则将num插入到第一个出现的位置。最后输出插入后的新数组。
具体实现是通过定义左右两个指针,每次将指针中间的位置mid与num进行比较,如果mid等于num,则在数组中插入num。如果mid小于num,则将左指针移动到mid+1的位置,如果mid大于num则将右指针移动到mid-1的位置。最后如果左指针大于右指针,则说明num应该插入到左指针的位置,然后使用splice方法将num插入到数组中。最后输出插入后的新数组。