Algoritmo InsertionSort Implementado em Java

O algoritmo InsertionSort  é um algoritmo simples de ordenação, que pode ser utilizado para ordenar uma quantidade pequena de números.

Este algoritmo é conhecido por sua simplicidade e facilidade de implementação. A ordenação é feita de uma forma similar ao que as pessoas utilizam para ordenar cartas de um baralho. Normalmente se mantêm as cartas em uma mão e durante o jogo, conforme vão recebendo as cartas, colocam as cartas recebidas na mão de uma forma ordenada.

A classe InsertionSort foi implementada em Java com dois métodos, o método sortAsc(int[] values) que faz a ordenação de uma matriz de números inteiros em ordem crescente e o método sortDesc(int[] values) que faz a ordenação em ordem decrescente.

/**
 * Faz a ordenação de uma matriz de números inteiros.
 */
public class InsertionSort {

    /*
     * Faz a ordenação de forma crescente
     */
    public int[] sortAsc(int[] values){
        int key = 0;
        int i = 0;
        
        for (int j = 1; j < values.length; j++) {
            key = values[j];
            i = j - 1;
            while (i >= 0 && values[i] > key) {
                values[i + 1] = values[i];
                i = i - 1;
            }            
            values[i + 1] = key;
        }        
        return values;
    }
    
    /*
     * Faz a ordenação de forma decrescente
     */
    public int[] sortDesc(int[] values){
        int key = 0;
        int i = 0;
        
        for (int j = 1; j < values.length; j++) {
            key = values[j];
            i = j - 1;
            while (i >= 0 && values[i] < key) {
                values[i + 1] = values[i];
                i = i - 1;
            }            
            values[i + 1] = key;
        }        
        return values;
    }
}

O algoritmo ordena os números de entrada da matriz na própria matriz, fazendo uma reorganização dos números.