Package controleEstoque.estruturaDados

Source Code of controleEstoque.estruturaDados.MergeSort

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package controleEstoque.estruturaDados;

import controleEstoque.entidades.Produto;
import javax.swing.JOptionPane;

/**
*
* @author User
*/
public class MergeSort {
    ListaProdutos lista;
    Produto[] produtos;
   
    /**
     * Construtor da classe MergeSort para organizar uma Lista de Produtos
     * @param lista
     */
    public MergeSort(ListaProdutos lista){
        this.lista = lista;
        //obtem a quantidade de itens na lista, mesmo sendo estática.
        int count = lista.count();
        try {           
            produtos = new Produto[count];    
            /**
             * instancia o vetor com os produtos da lista.
             */
            No aux = lista.getLista();           
            for(int i = 0; i < count; i++ ){
                produtos[i] = (Produto) aux.getObjeto();
                aux = aux.getProx();
            }           
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e.toString() + ", Lista vazia!");
        }
       
    }
   
    /**
     * Ordena e retorna a lista de produtos instanciada anteriormente
     * @return Lista de produtos organizada
     */
    public ListaProdutos mergeProdutos(){
        mergeProdutos(0, produtos.length - 1);       
        return reestruturaLista();
    }
   
    /**
     * Ordena a lista instanciada a partir do array ordenado.
     * @return Lista organizada
     */
    private ListaProdutos reestruturaLista(){
        ListaProdutos lista = new ListaProdutos();
        for(int i = 0; i < produtos.length; i++){
            lista.adiciona(produtos[i]);
        }
       
        return lista;
    }
  
    /**
     * Recursiva que organiza o array ainda não ordenado.
     * @param inicio primeiro indice do array (use 0)
     * @param fim  ultimo indice do array (use array.lenght - 1)
     */
    private void mergeProdutos(int inicio, int fim){
        if(inicio < fim){
            int meio = (inicio + fim)/2;
            mergeProdutos(inicio, meio);
            mergeProdutos(meio+1, fim);
            mesclaProduto(inicio, meio, fim);       
        }      
    }
   
    /**
     * Ordena e passa para o array da classe
     * @param inicio
     * @param meio
     * @param fim
     */
    private void mesclaProduto(int inicio, int meio, int fim){
        int i1 = inicio, f1 = meio, i2 = meio+1, f2 = fim;
        int iaux = inicio;       
             
        Produto aux[] = new Produto[produtos.length];
        while(i1 <= f1 && i2 <= f2){
            if(produtos[i1].getId() < produtos[i2].getId()){
                aux[iaux] = produtos[i1];
                iaux++;
                i1++;
            }else{
                aux[iaux++] = produtos[i2++];
            }
        }
       
        while(i1 <= f1)
            aux[iaux++] = produtos[i1++];
        while(i2 <= f2)
            aux[iaux++] = produtos[i2++];
       
        for(int i = inicio; i <= fim; i++){
            produtos[i] = aux [i];
        }
    }
   
   
   
  
   
}
TOP

Related Classes of controleEstoque.estruturaDados.MergeSort

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.