9.设线性表存放在向量A[1.. MAXNUM]的前elenum个分量中,且递增有序。试写一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。
时间: 2023-04-09 12:04:57 浏览: 172
可以使用二分查找的方法来找到插入位置,具体算法如下:
1. 定义变量low、high、mid,分别表示线性表的起始位置、结束位置和中间位置。
2. 如果low大于high,则说明x应该插入到low的位置上。
3. 否则,计算mid=(low+high)/2,比较x和A[mid]的大小:
a. 如果x小于A[mid],则说明x应该插入到A[low..mid-1]中,令high=mid-1,返回步骤2。
b. 如果x大于A[mid],则说明x应该插入到A[mid+1..high]中,令low=mid+1,返回步骤2。
c. 如果x等于A[mid],则说明x已经存在于线性表中,不需要插入。
4. 将x插入到A[low]的位置上,然后将A[low+1..elenum]中的元素依次后移一个位置。
5. 将elenum加1,表示线性表长度增加了1。
完整代码如下:
void insert(int A[], int& elenum, int x) {
int low = 1, high = elenum, mid;
while (low <= high) {
mid = (low + high) / 2;
if (x < A[mid]) {
high = mid - 1;
} else if (x > A[mid]) {
low = mid + 1;
} else {
// x already exists in A
return;
}
}
for (int i = elenum; i >= low; i--) {
A[i+1] = A[i];
}
A[low] = x;
elenum++;
}
阅读全文