题目连接:合并两个有序的数组
题目描述:
给出两个有序的整数数组 和 ,请将数组 合并到数组 中,变成一个有序的数组
注意:
可以假设数组有足够的空间存放 数组的元素, 和 中初始的元素数目分别为m和n
解法一:最简单解法,暴力求解(合并两数组+冒泡排序)
100.00% 通过率 4ms 运行时间 504KB 占用内存`
#include <cstring>
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
//合并数组
for(int index_a = m, index_B = 0; index_a < m+n; index_a++, index_B++)
A[index_a] = B[index_B];
for(int i = 0; i < m+n; i++)
for(int j = 0; j < m+n-1; j++)
{
if(A[j] > A[j+1])
{
int t = A[j];
A[j] = A[j+1];
A[j+1] = t;
}
}
}
}
解法二:从尾到头比较插入
100.00% 通过率 3ms 运行时间 480KB 占用内存
#include <cstring>
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
//B数组为空直接返回
if(n == 0)
return ;
//A为空但是B不为空
else if(m == 0)
{
int index_AB = 0;
for(index_AB = 0; index_AB < n; index_AB++)
A[index_AB] = B[index_AB];
}
//正常情况
//从后往前放数据
else
{
int index = m+n-1;
int index_A = m-1;
int index_B = n-1;
while(index_A > -1 && index_B > -1)
{
if(A[index_A] > B[index_B])
{
A[index--] = A[index_A];
index_A--;
}
else
{
A[index--] = B[index_B];
index_B--;
}
}
if(index_A < 0)
while(index_B > -1)
{
A[index--] = B[index_B--];
}
}
}
};