已知数组a中存储长度为m的有序序列(升序),数组长度为n(n>m),编写函数,将整数k插入到有序序列适当位置,插入后任保证序列有序
时间: 2023-04-26 08:05:35 浏览: 127
可以使用二分查找的方法,找到k应该插入的位置,然后将k插入到该位置即可。
具体步骤如下:
1. 定义两个指针left和right,分别指向数组a的第一个元素和最后一个元素。
2. 在while循环中,计算中间位置mid=(left+right)/2,比较a[mid]和k的大小。
3. 如果a[mid]<k,则说明k应该插入到mid的右侧,将left指向mid+1。
4. 如果a[mid]>k,则说明k应该插入到mid的左侧,将right指向mid-1。
5. 如果a[mid]=k,则说明k已经存在于数组中,直接返回。
6. 循环结束后,left指向的位置就是k应该插入的位置,将k插入到该位置即可。
代码如下:
void insert(int a[], int n, int m, int k) {
int left = , right = m - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] < k) {
left = mid + 1;
} else if (a[mid] > k) {
right = mid - 1;
} else {
return; // k已经存在于数组中,直接返回
}
}
// left指向的位置就是k应该插入的位置
for (int i = n - 1; i >= left; i--) {
a[i + 1] = a[i]; // 将插入位置及其右侧的元素后移一位
}
a[left] = k; // 将k插入到插入位置
}
阅读全文