/* AUTOR: d3n3k4 (Dnk!)
* FECHA: 06/DIC/2010
* DESCRIPCION:
- Clase con distintos metodos de ordenacion, inserccion directa, seleccion
directa,burbuja y bublesort,shellsort.
* NOTA: Este codigo es libre y puede ser usado,modificado... siempre y cuando se
* mantenga los creditos y comentarios del autor.
*/
public class algoritmosOrdenacion {
/*
* Ordenamiento Simple por Insercion directa.
*/
public static int[] insercionDirecta(int[] vDesordenado) {
int temp,k;
for (int i = 1; i < vDesordenado.length;i++) {
temp = vDesordenado[i];
k = i - 1;
while (k >= 0 && vDesordenado[k] > temp) {
vDesordenado[k+1] = vDesordenado[k];
k--;
}
vDesordenado[k+1] = temp;
}
return vDesordenado;
}
/*
* Ordenamiento Simple por Seleccion directa.
*/
public static int[] seleccionDirecta(int[] vDesordenado) {
int i,temp;
for (int k = 0; k < vDesordenado.length - 1;k++) {
i = k;
temp = vDesordenado[k];
for (int j = k + 1; j < vDesordenado.length; j++) {
if (vDesordenado[j] < temp) {
i = j;
temp = vDesordenado[i];
}
}
vDesordenado[i] = vDesordenado[k];
vDesordenado[k] = temp;
}
return vDesordenado;
}
/*
* Ordenamiento por intercambio directo (Burbuja).
*/
public static int[] intercambioDirecto(int[] vDesordenado) {
int temp;
for (int i = 1; i < vDesordenado.length; i++) {
for (int j = vDesordenado.length - 1; j >= i ; j--) {
if (vDesordenado[j] < vDesordenado[j-1]) {
temp = vDesordenado[j];
vDesordenado[j] = vDesordenado[j-1];
vDesordenado[j-1] = temp;
}
}
}
return vDesordenado;
}
/*
* Ordenamiento por burbuja optimizado (Bublesort).
*/
public static int[] intercambioDirectoOptimizado(int[] vDesordenado) {
int temp;
for (int i = 0; i < vDesordenado.length; i++) {
for (int j = 0; j < i ; j++) {
if (vDesordenado[i] < vDesordenado[j]) {
temp = vDesordenado[j];
vDesordenado[j] = vDesordenado[i];
vDesordenado[i] = temp;
}
}
}
return vDesordenado;
}
/*
* Ordenamiento por mezcla, optimizado de inserccion directa.
*/
public static int[] shellSort(int[] vDes) {
for ( int increment = vDes.length / 2; increment > 0; increment = (increment == 2 ? 1 : (int) Math.round(increment / 2.2))) {
for (int i = increment; i < vDes.length; i++) {
for (int j = i; j >= increment && vDes[j - increment] > vDes[j]; j -= increment) {
int temp = vDes[j];
vDes[j] = vDes[j - increment];
vDes[j - increment] = temp;
}
}
}
return vDes;
}
}