5.编程题:合并两个已经按照升序排列的一维数组。例如合并前数组a[10]={1,3,5,7,9},b[5]={2,4,8,16,32},合并后a[10]={1, 2,3, 4,5,7,8,9,16,3
时间: 2024-05-23 18:07:50 浏览: 73
题目描述:
给定两个已经按照升序排列的一维数组a和b,假设数组a有n个元素,数组b有m个元素,请将它们合并成一个按升序排列的数组。
示例:
输入:
a = [1,3,5,7,9]
b = [2,4,8,16,32]
输出:
merged = [1,2,3,4,5,7,8,9,16,32]
解决方案:
一个简单的思路是利用归并排序的合并过程来实现。具体步骤如下:
1. 定义一个新的数组,长度为两个数组长度之和。
2. 使用两个指针i和j分别指向数组a和b的第一个元素。
3. 依次比较i和j指向的元素大小,将较小的元素添加到新的数组中,并将指针向后移动一位。
4. 当其中一个指针指向数组末尾时,将另一个数组中剩余的元素添加到新的数组中。
5. 返回新的数组。
代码如下所示:
```
def merge_sorted_arrays(a, b):
n = len(a)
m = len(b)
merged = * (n + m)
i = j = k = 0
while i < n and j < m:
if a[i] <= b[j]:
merged[k] = a[i]
i += 1
else:
merged[k] = b[j]
j += 1
k += 1
while i < n:
merged[k] = a[i]
i += 1
k += 1
while j < m:
merged[k] = b[j]
j += 1
k += 1
return merged
```
阅读全文