Prefácio: A ideia original de se apaixonar por Java nunca foi esquecida: “Compartilhar meus resultados de aprendizagem, por mais profunda que seja a tecnologia posterior, é importante estabelecer uma boa base”.
Classe de ferramenta Swapper, esta classe de ferramenta será usada em algoritmos posteriores:
Copie o código do código da seguinte forma:
pacote com.meritit.sortord.util;
/**
* Um utilitário para trocar o elemento de reboque do Array
*
* @autor ysjian
*@versão 1.0
* @e-mail [email protected]
* @QQ 646633781
* @telefone 18192235667
* @csdnBlog http://blog.csdn.net/ysjian_pingcx
* @createTime 20/12/2013
* Mérito @copyRight
*/
classe pública Trocador {
privateSwapper() {
}
/**
* Trocar dois elementos do array
*
* @param oneIndex
* um índice
* @param outroIndex
* outro índice
* @param matriz
* o array a ser trocado
* @exception NullPointerException
*se a matriz for nula
*/
public static <T estende Comparable<T>> void swap(int oneIndex,
int outroIndex, T[] array) {
if (matriz == nulo) {
throw new NullPointerException("entrada de valor nulo");
}
checkIndexs(umIndex, outroIndex, array.length);
T temp = array[oneIndex];
array[umIndex] = array[outroIndex];
array[outroIndex] = temp;
}
/**
* Trocar dois elementos do array
*
* @param oneIndex
* um índice
* @param outroIndex
* outro índice
* @param matriz
* o array a ser trocado
* @exception NullPointerException
*se a matriz for nula
*/
public static void swap(int oneIndex, int anotherIndex, int[] array) {
if (matriz == nulo) {
throw new NullPointerException("entrada de valor nulo");
}
checkIndexs(umIndex, outroIndex, array.length);
int temp = array[oneIndex];
array[umIndex] = array[outroIndex];
array[outroIndex] = temp;
}
/**
* Verifique o índice se está no arranjo
*
* @param oneIndex
* um índice
* @param outroIndex
* outro índice
* @param comprimento da matriz
* o comprimento da matriz
* @exception IllegalArgumentException
* se o índice estiver fora do intervalo
*/
private static void checkIndexs(int oneIndex, int anotherIndex,
int comprimento da matriz) {
if (oneIndex < 0 || outroIndex < 0 || oneIndex >= arrayLength
|| outroÍndice >= comprimento da matriz) {
lançar new IllegalArgumentException(
"ilegalArguments para índices de reboque [" + oneIndex + ","
+ oneIndex + "]");
}
}
}
Classificação de inserção direta, InsertionSortord:
Copie o código do código da seguinte forma:
pacote com.meritit.sortord.insertion;
/**
* Ordem de classificação de inserção, complexidade de tempo é O(n2)
*
* @autor ysjian
*@versão 1.0
* @e-mail [email protected]
* @QQ 646633781
* @telefone 18192235667
* @csdnBlog http://blog.csdn.net/ysjian_pingcx
* @createTime 31/12/2013
* Mérito @copyRight
* @desde 1.5
*/
classe pública InsertionSortord {
private static final InsertionSortord INSTANCE = new InsertionSortord();
private InsertionSortord() {
}
/**
* Obtenha a instância do InsertionSortord, apenas uma instância
*
* @return a única instância
*/
public static InsertionSortord getInstance() {
retornar INSTÂNCIA;
}
/**
* Classifique a matriz de <code>int</code> com ordem de classificação de inserção
*
* @param matriz
* a matriz de int
*/
public void doSort(int... array) {
if (array! = null && array.length > 0) {
comprimento interno = array.comprimento;
// a circulação começa em 1, o valor do índice 0 é referência
for (int i = 1; i < comprimento; i++) {
if (matriz[i] <matriz[i - 1]) {
// se o valor no índice i for menor que o valor no índice i-1
int vaga = i; // registra a vaga como i;
// define uma sentinela como o valor no índice i
int sentinela = array[i];
// circulação de chaves, do índice i-1,
for (int j = i - 1; j >= 0; j--) {
if (array[j] > sentinela) {
/*
* se o valor do índice atual exceder o
* sentinela, depois mova para trás, registre o novo
*vaga como j
*/
matriz[j + 1] = matriz[j];
vaga = j;
}
}
// coloca a sentinela para a nova vaga
array[vaga] = sentinela;
}
}
}
}
/**
* Classifique a matriz de <code>T</code> genérico com ordem de classificação de inserção
*
* @param matriz
* a matriz de genérico
*/
public <T estende Comparable<T>> void doSortT(T[] array) {
if (array! = null && array.length > 0) {
comprimento interno = array.comprimento;
for (int i = 1; i < comprimento; i++) {
if (array[i].compareTo(array[i - 1]) < 0) {
Sentinela T = array[i];
int vaga = i;
for (int j = i - 1; j >= 0; j--) {
if (array[j].compareTo(sentinela) > 0) {
matriz[j + 1] = matriz[j];
vaga = j;
}
}
array[vaga] = sentinela;
}
}
}
}
}
Teste TestInsertionSortord:
Copie o código do código da seguinte forma:
pacote com.meritit.sortord.insertion;
importar java.util.Arrays;
/**
* Testar ordem de classificação de inserção
*
* @autor ysjian
*@versão 1.0
* @e-mail [email protected]
* @QQ 646633781
* @telefone 18192235667
* @createTime 31/12/2013
* Mérito @copyRight
*/
classe pública TestInsertionSortord {
public static void main(String[] args) {
InsertionSortord insertSort = InsertionSortord.getInstance();
int[] matriz = { 3, 5, 4, 2, 6 };
System.out.println(Arrays.toString(array));
insertSort.doSort(array);
System.out.println(Arrays.toString(array));
System.out.println("---------------");
Inteiro[] matriz1 = { 3, 5, 4, 2, 6 };
System.out.println(Arrays.toString(array1));
insertSort.doSortT(array1);
System.out.println(Arrays.toString(array1));
}
}