设顺序表 va 中的数据元素递增有序。试写代码,将 插入到顺序表的 适当位置上,以保持该表的有序性。
时间: 2023-05-30 18:04:31 浏览: 54
假设顺序表 va 的长度为 n,要将元素 x 插入其中:
1. 从表尾开始向前遍历,找到第一个比 x 小的元素的下标 i
2. 将元素 x 插入到下标为 i+1 的位置上,同时将下标大于 i 的元素依次后移一位
3. 表长加1
具体代码如下:
```c++
void insertSortedList(int va[], int& n, int x) {
int i = n - 1; // 从表尾开始向前遍历
while (i >= 0 && va[i] > x) {
va[i+1] = va[i]; // 元素后移
i--;
}
va[i+1] = x; // 插入元素
n++; // 表长加1
}
```
注意事项:
- 如果 va 中已经存在和 x 相等的元素,那么插入的位置是该相等元素的后面
- 如果 va 已经满了,就无法插入新元素了
相关问题
设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
以下是将元素 x 插入到递增有序的顺序表 va 中的算法:
1. 定义插入位置 i 为 0。
2. 从表的第一个元素开始,循环遍历整个顺序表,直到找到第一个比 x 大的元素,将其位置记录为 i,然后退出循环。
3. 如果顺序表中的所有元素都比 x 小,则将 i 设为顺序表的长度加 1。
4. 将 x 插入到位置 i 上,其余元素依次后移一个位置。
5. 返回修改后的顺序表。
算法的时间复杂度为 O(n),其中 n 是顺序表的长度。
设顺序表va中的数据元素递增有序,试写一算法,将x插入到顺序表的适当位置,以保持该表的有序性
算法如下:
1. 定义变量i为0,j为表长-1。
2. 当i<=j时,执行以下循环:
a. 将中间位置mid设为(i+j)/2。
b. 判断x与va[mid]的大小关系:
(1) 若x<va[mid],则将j设为mid-1,继续执行循环。
(2) 若x>va[mid],则将i设为mid+1,继续执行循环。
(3) 若x=va[mid],则直接返回。
3. 将x插入到位置i处。
完整代码如下:
void insert(int va[], int n, int x) {
int i = 0, j = n - 1;
while (i <= j) {
int mid = (i + j) / 2;
if (x < va[mid]) {
j = mid - 1;
} else if (x > va[mid]) {
i = mid + 1;
} else {
return;
}
}
for (int k = n - 1; k >= i; k--) {
va[k + 1] = va[k];
}
va[i] = x;
}