Peossoal alguem pode me ajudar com Ordenar vetores ordem crescente

Crie dois vetores de 50 posições com valores inteiros aleatórios, ordene cada vetor individualmente,
e combine os dois vetores gerando um novo vetor de 100 posições, de forma que esse novo vetor já seja criado ordenado.

Este eh o meu codigo , como faco para criar um terceiro vetor e colocar cada elemento de vetor1 e vetor2 em cada posicao de ordem ordenada crescente.

public static void main(String[] args) {

    int num= 50;
    int[] vetor1 = new int[num];
   int[] vetor2 = new int[num];
    int x;
    Random tab = new Random();

    System.out.println("                \n----Vetor1 nao ordenado ---- \n");
    for (int i = 0; i < vetor1.length; i++) {
        if (i == vetor1.length - 1) {
            System.out.println(vetor1[i]);
            break;
        }
        vetor1[i] = tab.nextInt(num);
        System.out.print(vetor1[i] + "" +
                ",");

    }

    System.out.println("                \n----Vetor2 nao ordenado ---- \n");
    for ( int i = 0 ;i<vetor2.length ;i++){

        if (i== vetor2.length-1){
            System.out.println(vetor2[i]);
            break;
        }
        vetor2[i]= tab.nextInt(50);
        System.out.print(vetor2[i]+ ",");
}



    ordena(vetor1);
    System.out.print("\n ------Vetor1 ordenado em ordem crescente ------  \n");
    for (x=0;x<=48;x++)
        System.out.print(vetor1[x] + " ");


ordena2(vetor2);
    System.out.print("\n ------Vetor2 ordenado em ordem crescente ------  \n");
    for (int z=0;z<=48;z++)
        System.out.print(vetor2[z] + " ");

}

public static void ordena(int v1[]) {
    int i, j, aux;
    int pos = 50;
    for (i = 0; i <= pos; i++) {

        for (j = 0; j <= 48; j++) {
            if (v1[j] > v1[j + 1]) {
                aux = v1[j];
                v1[j] = v1[j + 1];
                v1[j + 1] = aux;

            }
        }
    }
}
    public static void ordena2 (int v2[]){
     int a, b, aux2;
        int pos1 = 50;
        for (a=0; a<=pos1 ; a++){

            for (b=0;b<=48;b++)

            { if (v2[b] > v2[b+1]) {
                aux2 = v2[b];
                v2[b] = v2[b + 1];
                v2[b + 1] = aux2;

            }
            }
        }
    }

}

Primeiramente, não precisa ter 2 métodos diferentes para ordenar os vetores, já que o algoritmo é o mesmo para ambos. Basta reaproveitar o mesmo método e só mudar o vetor que você passa como parâmetro. Outro detalhe é que você deve usar sempre o tamanho do vetor (length) em vez de um valor fixo, assim o método funciona para qualquer array. Assim:

public static void ordena(int vetor[]) {
    for (int i = 0; i < vetor.length; i++) { // use length em vez de um valor fixo
        for (int j = 0; j < vetor.length - 1; j++) { // use length em vez de um valor fixo
            if (vetor[j] > vetor[j + 1]) {
                int aux = vetor[j];
                vetor[j] = vetor[j + 1];
                vetor[j + 1] = aux;
            }
        }
    }
}

E no main você usa este método para ordenar ambos os arrays:

// gerar valores do vetor1 e vetor2
vetor1 = ...
vetor2 = ...


ordena(vetor1);
System.out.print("\n ------Vetor1 ordenado em ordem crescente ------  \n");
for (int i = 0; i < vetor1.length; i++) // use length em vez de um valor fixo
    System.out.print(vetor1[i] + " ");

// ordena o vetor2 usando o mesmo método
ordena(vetor2);
System.out.print("\n ------Vetor2 ordenado em ordem crescente ------  \n");
for (int i = 0; i < vetor2.length; i++) // use length em vez de um valor fixo
    System.out.print(vetor2[i] + " ");

Afinal, é para isso que servem métodos/funções: para reaproveitar o mesmo algoritmo. No caso, o algoritmo é o mesmo, só o que muda é o array que estamos ordenando, então ter 2 métodos que fazem exatamente a mesma coisa é redudante e desnecessário.


E para criar o terceiro vetor, basta que ele tenha o tamanho de vetor1 e vetor2 somados. Em seguida, você percorre ambos ao mesmo tempo, inserindo o menor deles no novo vetor, e avançando de posição conforme o elemento é adicionado.

// tamanho do vetor3 = tamanho do vetor 1 + tamanho do vetor2
int[] vetor3 = new int[vetor1.length + vetor2.length];
int i1 = 0, i2 = 0; // elemento atual de vetor1 e vetor2
for (int i = 0; i < vetor3.length; i++) {
    if (vetor1[i1] < vetor2[i2]) { // elemento do vetor1 é menor
        vetor3[i] = vetor1[i1];
        i1++; // vai para o próximo elemento de vetor1
        if (i1 == vetor1.length) {
            // se terminou vetor1, preenche com os valores restantes de vetor2
            System.arraycopy(vetor2, i2, vetor3, i + 1, vetor2.length - i2);
            break; // sai do for
        }
    } else {
        vetor3[i] = vetor2[i2];
        i2++; // vai para o próximo elemento de vetor2
        if (i2 == vetor2.length) {
            // se terminou vetor2, preenche com os valores restantes de vetor1
            System.arraycopy(vetor1, i1, vetor3, i + 1, vetor1.length - i1);
            break; // sai do for
        }
    }
}
System.out.println("\nvetor3:");
for (int i = 0; i < vetor3.length; i++)
    System.out.print(vetor3[i] + " ");

Claro que dá para melhorar (a cópia dos valores restantes poderia estar em outro método, etc), mas a ideia geral é essa.

Fiz como recomendado e continua dando erro .

    ordena1(vetor1,vetor2);
    System.out.print("\n ------Vetor1 ordenado em ordem crescente ------  \n");
    for (x=0;x<=vetor1.length;x++){

        System.out.print(vetor1[x] + " ");}
    /* ------------------------------- */

    System.out.print("\n ------Vetor2 ordenado em ordem crescente ------  \n");
    for (int z=0;z<= vetor2.length;z++)
        System.out.print(vetor2[z] + " ");

}

public static void ordena1(int v1[], int v2[]) {
    int i, j, aux;
    int a, b, aux2;

    for (i = 0; i <= v1.length; i++) {

        for (j = 0; j <=v1.length-1; j++) {
            if (v1[j] > v1[j + 1]) {
                aux = v1[j];
                v1[j] = v1[j + 1];
                v1[j + 1] = aux;

            }
        }

        for (a=0; a<=v2.length ; a++){

            for (b=0;b<=v2.length-1;b++)

            { if (v2[b] > v2[b+1]) {
                aux2 = v2[b];
                v2[b] = v2[b + 1];
                v2[b + 1] = aux2;

            }
            }
        }

Erro " Index 50 out of bounds for length 50"

Nos seus laços for você está testando se o índice é <= ao length do vetor.
Está errado, tem que testar se é <.