两个有序的数组A,B。A的数组长度是B数组长度两倍。A数组的后半部分是空的,数据都在前半部分。现在要求把元素都合并到A里面,并且保持有序。
方法一:
//用-1代替空值部分
public class test002 {
public static void main(String[] args) {
int[] a = new int[]{1,3,5,7,9,-1,-1,-1,-1,-1};
int[] b = new int[]{0,2,4,6,8};
for(int i=0; i<b.length; i++){
a[a.length/2+i]=b[i];
}
for(int j=0; j<a.length; j++){
for(int k=0; k<a.length-1-j; k++){
if(a[k]>a[k+1]){
int temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
for(int i=0; i<a.length; i++){
System.out.print(a[i]+" ");
}
}
}
方法二:
public class test002 {
public static void main(String[] args) {
int[] a = new int[]{1,3,5,7,9,-1,-1,-1,-1,-1};
int[] b = new int[]{0,2,4,6,8};
sort(a,b,a.length/2, b.length);
for(int j=0; j<a.length; j++){
System.out.print(a[j]+" ");
}
}

private static void sort(int[] a, int[] b, int m, int n) {
    int k = m+n-1;
    int j= n -1;
    int i = m - 1;

    while (k >= 0) {
        if(i < 0){
            a[k] = b[j];
            j--;
        }
        else if(j < 0 || a[i] > b[j]){
            a[k] = a[i];
            i--;
        }else{
            a[k] = b[j];
            j--;
        }
        k--;
    }
}

}
方法三:
public class test002 {
public static void main(String[] args) {
int[] a = new int[]{1,3,5,7,9,-1,-1,-1,-1,-1};
int[] b = new int[]{0,2,4,6,8};
int[] c = new int[a.length];
sort(a,b,c,a.length/2, b.length);
for(int j=0; j<c.length; j++){
a[j] = c[j];
}
for(int j=0; j<a.length; j++){
System.out.print(a[j]+" ");
}
}

private static void sort(int[] a, int[] b, int[] c, int m, int n) {
    int i=0;
    int j=0;
    while (i<m && j<n){
        if(a[i]<b[j]){
            c[i+j]=a[i];
            i++;
        }else {
            c[i + j] = b[j];
            j++;
        }
    }

    while (i<m){
        c[i+j]=a[i];
        i++;
    }

    while (j<n){
        c[i+j] = b[j];
        j++;
    }
}

}
欢迎交流指正~