利用递归实现
合并两个有序的数组
http://www.nowcoder.com/questionTerminal/89865d4375634fc484f3a24b7fe65665
递归
从两个数组的尾部开始比较,如果A[m-1] <= B[n-1],那么将最大数B[n-1]赋值给A[m+n-1],然后n-1,重复。反之将A[m-1]赋值给A[m+n-1],然后m-1。递归结束的标志有俩,当A的数组遍历完了而B没有(m==0&&n!=0),此时将B剩下的值赋值给A的数组;标志2就是,当n为0的时候,包括两种情况,第一种标志的结束标志m == 0,n == 0,另一种就是A的数组还没有遍历完B数组已经遍历完了(m!=0,n==0),这时候A数组是排序好的,不需要再遍历排序。
public class Solution {
public void merge(int A[], int m, int B[], int n) {
if(m == 0&&n!=0)//A的数组遍历完了,B没有
{
A[n-1] = B[n-1]; //直接赋值
merge(A,0,B,n-1);
}
else if(n==0) //两个标志
return;
else{
if(A[m-1]<=B[n-1]){
A[m+n-1] = B[n-1];
merge(A,m,B,n-1);
}
else{
A[m+n-1] = A[m-1];
merge(A,m-1,B,n);
}
}
}
} 递归的循环版
递归比较方便,但是时间复杂度比较高,拆分成循环
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int i = m+n-1;
for(;i >=0;i--){
if(m == 0)
{
A[i] = B[n-1];
n--;
}
else if(n == 0){}
else{
if(A[m-1]<=B[n-1])
{
A[i] = B[n-1];
n--;
}
else{
A[i] = A[m-1];
m--;
}
}
}
}
}
查看14道真题和解析