文章目录
- 题目
- 思路
- 代码实现
- 效果
题目
将两个有序顺序表合并为一个有序顺序表,函数结果返回值为顺序表。
思路
- 我们可以利用二路归并排序算法中的Merge函数思路,设置两个指针i,j,分别记录在顺序表a和b中的访问位置,再利用直接插入排序算法思想,将比较后的元素值插入顺序表中。时间复杂度为O(n),空间复杂度为O(n)。
代码实现
Array LinearList::Question_07()
{
Array arr1,arr2;
arr1.length = 5;
cout<<"insert 5 nums to arr1:"<<endl;
for(int i = 0;i < arr1.length;i ++)
{
cin >> arr1.data[i];
}
arr2.length = 5;
cout<<"insert 5 nums to arr2:"<<endl;
for(int i = 0;i < arr2.length;i ++)
{
cin >> arr2.data[i];
}
int i = 0,j = 0,k = 0;
arr.length = arr1.length + arr2.length;
while(i < arr1.length || j < arr2.length)
{
if(arr1.data[i] <= arr2.data[j] && i < arr1.length && j < arr2.length)
{
arr.data[k++] = arr1.data[i++];
}
else if(arr1.data[i] > arr2.data[j] && i < arr1.length && j < arr2.length)
{
arr.data[k++] = arr2.data[j++];
}
else if(j >= arr1.length-1)
{
arr.data[k++] = arr1.data[i++];
}
else if(i >= arr2.length-1)
{
arr.data[k++] = arr2.data[j++];
}
}
return arr;
}