Merge Sort com matriz, problemas

1 resposta
S

Pessoal, tava tentando modificar aqui classe merge sort utilizando matriz ao invés de vetor, só que n está dando certo, nem sei se estou no caminho certo, alguém pode ajudar? segue:

obrigado.

public class MSort {

	private int[][] vetor = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 },
			{ 9, 10 }, { 11, 12 }, { 13, 14 }

	};

	MSort() {

		int tamanho = 20;

	}

	private void merge(int[][] dic, int inicio_linha, int inicio_coluna,
			int fim_linha, int fim_coluna) {

		if (inicio_linha < fim_linha && inicio_coluna < fim_coluna) {

			int meio_linha;
			int meio_coluna;
			meio_linha = (inicio_linha + fim_linha) / 2;
			meio_coluna = (inicio_coluna + fim_coluna) / 2;

			merge(dic, inicio_linha, inicio_coluna, meio_linha, meio_coluna);
			merge(dic, meio_linha + 1, meio_coluna + 1, fim_linha, fim_coluna);
			mesclar(inicio_linha, inicio_coluna, meio_linha, meio_coluna,
					fim_linha, fim_coluna);

		}

	}

	private void mesclar(int inicio_linha, int inicio_coluna, int meio_linha,
			int meio_coluna, int fim_linha, int fim_coluna) {

		int tamanho = vetor.length;

		int[][] temp;
		temp = vetor;

		// i_linha vai do inicio ate o meio
		int i_linha = 0;

		// i_coluna vai do inicio ate o meio
		int i_coluna = 0;

		// j_linha vai a partir do meio ate o final
		int j_linha = meio_linha - inicio_linha + 1;

		// j_coluna vai a partir do meio ate o final
		int j_coluna = meio_coluna - inicio_coluna + 1;

		for (int posicao = 0; posicao < tamanho; posicao++) {
			if (j_linha <= tamanho - 1 && j_coluna <= tamanho - 1) {
				if (i_linha <= meio_linha - inicio_linha
						&& i_coluna <= meio_coluna - inicio_coluna) {
					if (temp[i_linha][i_coluna] < temp[j_linha][j_coluna]) {
						vetor[inicio_linha + posicao][inicio_coluna + posicao] = temp[i_linha++][i_coluna++];
					} else {
						vetor[inicio_linha + posicao][inicio_coluna + posicao] = temp[j_linha++][j_coluna++];
					}
				} else {
					vetor[inicio_linha + posicao][inicio_coluna + posicao] = temp[j_linha++][j_coluna++];
				}
			} else {
				vetor[inicio_linha + posicao][inicio_coluna + posicao] = temp[j_linha++][j_coluna++];
			}
		}

	}

	public static void main(String[] args) {

		MSort msort = new MSort();

		msort.merge(msort.vetor, 0, 0, 7, 7);

	}
}

1 Resposta

S

alguém?

Criado 13 de maio de 2011
Ultima resposta 15 de mai. de 2011
Respostas 1
Participantes 1