Métodos de ordenamiento.
Es la operación mediante la cual permite arreglar u organizar datos de una tabla o lista de una forma adecuada y principalmente secuencial teniendo en cuenta un criterio de ordenamiento. El ordenamiento se puede realizar siempre que exista un valor como requisito en algún lugar o campo. El principal objetivo de los métodos de ordenamiento, es que permita facilitar y agilizar la búsqueda de miembros o valores de un conjunto ordenado.
Cuando se habla de ordenamiento de datos significa mover los datos y dichas referencias, las cuales permitan una secuencia tal que represente un orden. dicho orden puede ser numérico, alfabético o incluso alfanumérico.
Los metodos de ordenamiento en el campo de estructura de datos son esenciales pusto que permiten almacenar informacion, recuperar informacion de una manera eficiente y coerente. El rol de los metodos de ordenamiento es ordenar una serie o grupo de datos, dichas acciones implican mover datos que queden en una secuencia la cual represente un orden.
Los metodos de ordenamiento en el campo de estructura de datos son esenciales pusto que permiten almacenar informacion, recuperar informacion de una manera eficiente y coerente. El rol de los metodos de ordenamiento es ordenar una serie o grupo de datos, dichas acciones implican mover datos que queden en una secuencia la cual represente un orden.
Ordenación Shaker.
El algoritmo de ordenación por el método Shaker, también conocido como "Cocktail" o "Sacudida" es una mejora
del método de la burbuja en la cual el proceso se realiza tanto desde la primera posición a la última del
arreglo como en sentido inverso, evitando así que los elementos más pequeños tarden un mayor tiempo
en "ascender" a las posiciones superiores.
Este metodo permite organizar, ordenamiento e intercambio directo de elementos del arreglo. Practicamente la idea basica de este algoritmo conciste en intercambiar, mezclar. existen dos formas en que se pueda realizar este algoritmo cada pasada tiene 2 pasadas.En la primera pasada, es de derecha a izquierda se trasladan los elementos mas pequeños hacia la izquierda del arreglo (almacenando la posicion del ultimo elemento intercambiado) en la segunda pasada de izquierda a derecha se trasladan los elementos mas grandes hacia la derecha del arreglo almacenando en otra variable la posicion del ultimo elemnto intercambiado. Este metodo de ordemanamiento permite visualizar la forma, en la cual se puede organizar datos desordenados que al final seran ordenados de una forma secuencial.
del método de la burbuja en la cual el proceso se realiza tanto desde la primera posición a la última del
arreglo como en sentido inverso, evitando así que los elementos más pequeños tarden un mayor tiempo
en "ascender" a las posiciones superiores.
Este metodo permite organizar, ordenamiento e intercambio directo de elementos del arreglo. Practicamente la idea basica de este algoritmo conciste en intercambiar, mezclar. existen dos formas en que se pueda realizar este algoritmo cada pasada tiene 2 pasadas.En la primera pasada, es de derecha a izquierda se trasladan los elementos mas pequeños hacia la izquierda del arreglo (almacenando la posicion del ultimo elemento intercambiado) en la segunda pasada de izquierda a derecha se trasladan los elementos mas grandes hacia la derecha del arreglo almacenando en otra variable la posicion del ultimo elemnto intercambiado. Este metodo de ordemanamiento permite visualizar la forma, en la cual se puede organizar datos desordenados que al final seran ordenados de una forma secuencial.
Codigo de Shaker Sort.
package ventanas;
import javax.swing.JOptionPane;
public class Control {
// Se declara las variables las cuales van a ser utilizadas en el metodo
public static int derecha, izquierdo, ultimo;
//declaracion del arreglo
int numeros[] = new int[6];
//se inicializa la posicion del arreglo
int pos = 0;
//creamos un metodo que permita guardar numeros
public void guardarNumero() {
//se llaman los datos de entrada que ingresa el usuario el la ventana
String numerSt = VentanaShaker.jTextFieldNumero.getText();
int n = Integer.parseInt(numerSt);
//donde se guarda los numeros ingresados
numeros[pos] = n;
//incrementa o pasa a la siguiente posicion del arreglo para guardar
pos++;
// mensaje que informa que dicho numero ingresado es guardado
JOptionPane.showMessageDialog(null, "numero Agregado Exitosamente!!!");
//llama al metodo siguiente
imprimirNumeros();
}
//metodo para listar el arreglo en el area de texto
public void imprimirNumeros() {
//String se la crea para mostrar los datos o concardenarlos
String cad = "";
// El for de imprimir desodenados
for (int i = 0; i < numeros.length; i++) {
cad = cad + numeros[i] + "\t";
}
cad += "\n";
//dentro del jTexArea se van a mostrar los datos desordenados o ingresados por el usuario
VentanaShaker.jTextAreaDatos.setText(cad);
}
//se crea un nuevo metodo que permita recorrer el arreglo para empezar a ordenar
public void recoorer() {
izquierdo = 1;
derecha = numeros.length;
ultimo = numeros.length - 1;
do {
for (int i = numeros.length - 1; i > 0; i--) {
//permite recorer el arreglo de derecha a izquierda
if (numeros[i - 1] > numeros[i]) {
//La variable auxiliar es a que permite hacer el intercambio de posicion
int aux = numeros[i];
numeros[i] = numeros[i - 1];
numeros[i - 1] = aux;
ultimo = 1;
}
}
izquierdo = ultimo + 1;
for (int k = 1; k < numeros.length; k++) {
//permite hacer el recorrico o sacudida de izquierda a derecha
if (numeros[k - 1] > numeros[k]) {
int aux = numeros[k];
numeros[k] = numeros[k - 1];
numeros[k - 1] = aux;
ultimo = k;
}
}
derecha = ultimo - 1;
//este ciclo permite verificar si ya esta ordenado el arreglo
} while (derecha >= izquierdo);
}
public void concardenar() {
String cad = "";
recoorer();
//el for nuevamente recorre el arreglo para mostrar sus los datos ordenados
for (int i = 0; i < numeros.length; i++) {
cad = cad + numeros[i] + "\t";
}
cad += "\n";
//permite mostrar en el tex area los datos ordenados
VentanaShaker.Ordenador.setText(cad);
}
}
listas dobles.
Las listas doblemente enlazadas son estructuras de datos semejantes a las listas enlazadas simples.
La asignación de memoria es hecha al momento de la ejecución.
En cambio, en relación a la listas enlazada simple el enlace entre los elementos se hace gracias a dos punteros (uno que apunta hacia el elemento anterior y otro que apunta hacia el elemento siguiente).
El puntero anterior del primer elemento debe apuntar hacia NULL (el inicio de la lista).
El puntero siguiente del último elemento debe apuntar hacia NULL (el fin de la lista).
Para acceder a un elemento, la lista puede ser recorrida en ambos sentidos:
· comenzando por el inicio, el puntero siguiente permite el desplazamiento hacia el próximo elemento.
· comenzando por el final, el puntero anterior permite el desplazamiento hacia el elemento anterior.
CÓDIGO LISTAS DOBLES ( MÉTODO "shakerSort").
public void shakerSort() {
// inicialisamos head en ini
node ini = this.head;
// fin lo hasemos igual a ini
node fin = ini;
// evaluamos la condicion para cuando fin sea diferente de null con el while
while (fin.getNext() != null) {
fin = fin.getNext();
}
while (ini != fin && ini.getBack() != fin) {
// node p lo pomemos en la pocicion de ini
node p = ini;
// hacemos la comparacion con el while para que p haga el recorrido
// hasta el final
while (p != fin) {
// ponemos la condicion para cuando se cumpla la condicion del while
if (p.getVal() > p.getNext().getVal()) {
if (p == this.head) {
this.head = p.getNext();
}
if (p == ini) {
ini = p.getNext();
}
if (p.getNext() == fin) {
fin = p;
}
// llamamos al metodo de intercabio para mover los nodos
p = this.exchange(p, p.getNext());
}
p = p.getNext();
// se termina el recorrido
}
// se inicia el otro recorrido
// ahora nos de volvemos del final hasta el inicio.
fin = fin.getBack();
// inicialisamos a node q en fin
node q = fin;
// evaluamos la condicion con el while para que q haga su recorrido.
while (q != ini) {
// condiciones para cuando que el while pueda mover a q
if (q.getVal() < q.getBack().getVal()) {
if (q == fin) {
fin = q.getBack();
}
if (q.getBack() == this.head) {
this.head = q;
}
if (q.getBack() == ini) {
ini = q;
}
// llamamos el metodo de intercambio
q = this.exchange(q.getBack(), q);
} else {
q = q.getBack();
}
}
ini = ini.getNext();
}
}
BIBLIOGRAFIA:
- JORGEP, Evaluador Simple De Funciones En Java . [EN LINEA]. Web. domingo, octubre 10, 2010. [Citado en 29 de Septiembre de 2015]. Disponible en internet: <http://jorgep.blogspot.com.co/2010/10/evaluador-simple-de-funciones-en-java.html>
- RAUL MARISCAL, Shaker Sort. [EN LINEA]. Web. 10/03/2010. [Citado en 29 de Septiembre de 2015]. Disponible en internet: <https://www.youtube.com/watch?v=74u4mszivbu>
- JUAN PABLO ORTEGA FLORES, Metodos De Oredenamiento. [EN LINEA]. Web. 25/02/2013. [Citado en 29 de Septiembre de 2015]. Disponible en internet: <http://iutprogramacion.blogspot.com.co/2013/02/metodos-de-ordenamiento.html>
- ANAMAYA , Lariza.Listas Enlazadas Dobles. [s.l.]. 2013. http://coodigob.blogspot.com.co/2013/03/listas-enlazadas-dobles.html (consultado 24 octubre 2015).
No hay comentarios:
Publicar un comentario