设顺序表va中的数据元数递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性,例如输入:“1,3,5,8,9”和“2”。输出:“1,2,3,5,8,9”
时间: 2023-05-30 21:04:09 浏览: 188
已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值递增有序的顺序表C。
5星 · 资源好评率100%
算法如下:
1. 初始化指针i为0,j为表长n-1。
2. 当i<=j时,执行以下操作:
a. 计算中间位置mid=(i+j)/2。
b. 如果x小于va[mid],则j=mid-1。
c. 如果x大于va[mid],则i=mid+1。
d. 如果x等于va[mid],则插入到位置mid+1,并返回。
3. 插入到位置i,并将i之后的元素依次后移一位。
4. 将x插入到位置i。
5. 返回修改后的表。
代码实现如下:
```c
void insert(int va[], int n, int x) {
int i = 0, j = n - 1, mid;
while (i <= j) {
mid = (i + j) / 2;
if (x < va[mid]) {
j = mid - 1;
} else if (x > va[mid]) {
i = mid + 1;
} else {
break;
}
}
for (int k = n - 1; k >= i; k--) {
va[k + 1] = va[k];
}
va[i] = x;
}
```
测试代码如下:
```c
#include <stdio.h>
void insert(int va[], int n, int x);
int main() {
int va[] = {1, 3, 5, 8, 9};
int n = sizeof(va) / sizeof(va[0]);
int x = 2;
insert(va, n, x);
for (int i = 0; i < n + 1; i++) {
printf("%d ", va[i]);
}
printf("\n");
return 0;
}
// 输出:1 2 3 5 8 9
```
阅读全文