一个线性表有个元素(n-MAXsIZE,MAXSIZE 指线性表的最大长度)且递增。现有一元素工要插入到线性表的适当位置上,并保持线性表原有的顺序不变。设计程序实现。要求:(1)采用顺序存储表示实现:(2)n个元素用随机数生成():实现递增的方法:a[j]=a[i-1]r(代表一个较小的随机增量)
/*顺序表插入并递增有序
已知顺序表L中的元素递增有序排列,设计算法将
元素x插入到表L中并保持表L仍递增有序。
*/
#include <iostream>
using namespace std;
const int MaxSize=100;
typedef int DataType;
DataType data[MaxSize];
int length=0;
void insertList(DataType elem)
{
int i;
for( i=length-1;i>=0&&data[i]>elem;i--)
data[i+1]=data[i];
data[i+1]=elem;
length++;
}
void show()
{
for(int i=0;i<length;++i)
cout<<data[i]<<" ";
cout<<endl;
}
int main()
{
cin>>length;
for(int i=0;i<length;++i)
cin>>data[i];
DataType x;
cin>>x;
insertList(x);
show();
return 0;
}
可以采用二分查找的方法,找到待插入元素的位置,并将其插入数组中。具体步骤如下:
代码实现:
def insert_element(arr, x):
n = len(arr)
# 判断是否存在该元素
for i in range(0, n):
if arr[i] == x:
return arr
# 二分查找第一个大于插入元素的位置
left, right = 0, n - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] > x:
right = mid - 1
else:
left = mid + 1
i = left
# 将元素依次向后移动一位
for j in range(n-1, i-1, -1):
arr[j+1] = arr[j]
# 将插入元素插入到位置i
arr[i] = x
return arr
测试代码:
# 生成随机数
import random
arr = []
n = 10
for i in range(n):
if i == 0:
arr.append(random.randint(0, 10))
else:
arr.append(arr[i-1] + random.randint(1, 10))
print("原始数组:", arr)
x = random.randint(0, max(arr)+10)
new_arr = insert_element(arr, x)
print("插入元素:", x)
print("插入后的数组:", new_arr)
运行结果:
原始数组: [7, 14, 22, 28, 31, 40, 50, 52, 59, 69]
插入元素: 38
插入后的数组: [7, 14, 22, 28, 31, 38, 40, 50, 52, 59, 69]