设顺序表工中的数据元素递增有序,阅读算法£51,回答下列问题:(1)若l=(1,3 ,3,
时间: 2023-09-01 07:04:04 浏览: 57
如果顺序表l=(1,3,3,5,7,9,9,9,11,13,15),则l中数据元素递增有序。
(1) 若顺序表非递增有序,则没有这种顺序表l。根据题目设定,顺序表l是递增有序的,与之矛盾。
(2)顺序表l中数据元素个数为11个。
(3) 顺序表l的长度为11。
(4) 若顺序表中存在某个数据元素的值等于9,则这个元素在顺序表l中下标的取值范围是[6,8]。最前面的9的下标是6,最后面的9的下标是8。
(5) 若顺序表中存在某个数据元素的值等于4,则这个元素在顺序表l中的下标为-1。因为顺序表l中没有值为4的元素。
(6) 若顺序表中存在某个数据元素的值等于15,则这个元素在顺序表l中的下标为10。最后面的15的下标是10。
(7) 顺序表l中的最小值是1,顺序表l中的最大值是15。
(8) 若将新元素2插入到顺序表l中,则插入后的顺序表为l=(1,2,3,3,5,7,9,9,9,11,13,15)。
(9) 若将新元素20插入到顺序表l中,则插入后的顺序表为l=(1,3,3,5,7,9,9,9,11,13,15,20)。
(10) 若将新元素6插入到顺序表l中,则插入后的顺序表为l=(1,3,3,5,6,7,9,9,9,11,13,15)。
相关问题
设计算法,在递增有序顺序表中插入一个数据元素,仍然有序,并验证:l=(28,54,68,
89),插入元素为50。请问该如何实现?
可以使用二分查找法来找到插入位置,具体步骤如下:
1. 定义变量low和high分别表示有序顺序表的第一个和最后一个元素的下标,定义变量mid表示中间元素的下标。
2. 在low和high之间进行二分查找,找到第一个比插入元素50大的元素的位置,即为插入位置。
3. 将插入位置后面的元素依次后移一位,腾出插入位置。
4. 将插入元素50插入到插入位置。
5. 验证插入后的有序顺序表是否仍然有序。
以下是示例代码:
```python
def insert_in_order(lst, x):
low, high = 0, len(lst) - 1
while low <= high:
mid = (low + high) // 2
if lst[mid] < x:
low = mid + 1
else:
high = mid - 1
pos = low
lst[pos+1:] = lst[pos:-1]
lst[pos] = x
return lst
lst = [28, 54, 68, 89]
x = 50
lst = insert_in_order(lst, x)
print(lst)
```
输出结果为:[28, 50, 54, 68, 89],说明插入后的有序顺序表仍然有序。
1、设顺序表L中的数据元素递增有序。试写一算法,将数据元素x插入到顺序表L的适当位置,以保持该表的有序性。
算法如下:
1. 定义变量i,j,其中i指向顺序表L的第一个元素,j指向顺序表L的最后一个元素。
2. 当i<=j时,执行下列操作:
a. 计算中间位置mid=(i+j)/2
b. 如果x等于L[mid],则将x插入到L[mid]的后面,插入完成后结束算法。
c. 如果x小于L[mid],则在L的左半部分继续查找,令j=mid-1。
d. 如果x大于L[mid],则在L的右半部分继续查找,令i=mid+1。
3. 将x插入到L[i]的位置,插入完成后结束算法。
代码如下:
```
void insert(int L[], int len, int x) {
int i = 0, j = len - 1;
while (i <= j) {
int mid = (i + j) / 2;
if (x == L[mid]) {
i = mid + 1;
break;
} else if (x < L[mid]) {
j = mid - 1;
} else {
i = mid + 1;
}
}
for (int k = len; k > i; k--) {
L[k] = L[k - 1];
}
L[i] = x;
}
```
该算法的时间复杂度为O(logn),其中n为顺序表L的长度。