METODOS DE ORDENAMIENTOOrdenacin interna.Ordenar significa
reagrupar o reorganizar un conjunto de datos u objetos en una
secuencia especfica, la cual puede ser de dos formas distintas:-
Ascendente (menor a mayor) o- Descendente (mayor a menor). Los
mtodos de ordenacin se clasifican en dos categoras:- Ordenacin
interna (de arreglos) y- Ordenacin externa (de archivos).La
ordenacin interna o de arreglos, recibe este nombre ya que los
elementos o componentes del arreglo se encuentran en la memoria
principal de la computadora.Los mtodos de ordenacin interna a su
vez se clasifican en:- Mtodos directos (n2) y- Mtodos logartmicos
(n * log n). Los mtodos directos, son los ms simples y fciles de
entender, son eficientes cuando se trata de una cantidad de datos
pequea. Los mtodos logartmicos, son ms complejos, difciles de
entender y son eficientes en grandes cantidades de datos.Los mtodos
directos ms conocidos son:- Ordenacin por intercambio.- Ordenacin
por insercin.- Ordenacin por seleccin.Algoritmos de ordenamiento
por intercambio.La ordenacin por intercambio consiste en comparar
dos elementos del arreglo y determinar si existe un intercambio
entre ellos, para esto debe definirse el tipo de ordenamiento que
se quiere ya sea ascendente o descendente.Los algoritmos de
ordenacin directa por intercambio que se analizaran son:- El mtodo
de la burbuja.- El mtodo quicksort.- El mtodo
shellsort.Burbuja.
El mtodo de ordenacin por intercambio directo o mtodo de la
burbuja, es el ms simple y consiste en comparar dos elementos
adyacentes para determinar si se realiza un intercambio entre los
mismos, esto en caso de que el primero sea mayor que el segundo
(forma ascendente) o el caso de que el primero sea menor que el
segundo (forma descendente).
El primer procedimiento del mtodo de la burbuja es:Generar un
ciclo que inicie desde uno hasta el nmero de elementos del
arreglo.Generar un segundo ciclo dentro del anterior que inicie
desde cero hasta el nmero de elementos del arreglo menos dos.Dentro
del segundo ciclo debe existir una comparacin que determina el tipo
de ordenamiento (ascendente o descendente) entre el primer elemento
(posicin generado por el segundo ciclo) y el segundo elemento (el
que le sigue), si la respuesta a la condicin es verdadera se
realiza un intercambio entre los dos elementos.Para realizar el
intercambio se genera un almacenamiento temporal, el cual guarda el
dato del primer elemento, el segundo elemento toma el lugar del
primero y en el lugar del segundo se coloca lo que contiene el
almacenamiento temporal. Una vez que los ciclos terminan la
estructura debe quedar ordenada de forma ascendente o descendente,
pero este procedimiento es considerado como el pero de los casos ya
que si el nmero de elementos de la estructura es de 100, se tienen
que realizar 9900 comparaciones entes de terminar la ejecucin del
mtodo.Un segundo procedimiento del mtodo de la burbuja es:Generar
un ciclo que inicie desde cero hasta el nmero de elementos menos
dos.Generar un segundo ciclo desde el valor del ciclo anterior mas
uno hasta el nmero de elementos menos uno;Dentro del segundo ciclo
debe existir una comparacin que determina el tipo de ordenamiento
(ascendente o descendente) entre el primer elemento (posicin
generada por el primer ciclo) y el segundo elemento (posicin
generada por el segundo ciclo), si la respuesta a la condicin es
verdadera se realiza un intercambio entre los dos elementos.Para
realizar el intercambio se genera un almacenamiento temporal, el
cual guarda el dato del primer elemento, el segundo elemento toma
el lugar del primero y en el lugar del segundo se coloca lo que
contiene el almacenamiento temporal.Una vez que los ciclos terminan
la estructura debe quedar ordenada, la diferencia con el
procedimiento anterior radica en el nmero de comparaciones y
posibles intercambios que se presentan, en este segundo
procedimiento, es menor ya que cada pasada que se le da al arreglo
se realiza una comparacin menos que en la pasada anterior.Un tercer
procedimiento del mtodo de la burbuja es el siguiente:Generar un
ciclo que inicie desde uno hasta el nmero de elementos menos
uno.Generar un segundo ciclo que inicie desde el nmero de elementos
menos uno y mientras que ese valor sea mayor o igual al del ciclo
anterior (con decrementos).Dentro del segundo ciclo debe existir
una comparacin que determina el tipo de ordenamiento (ascendente o
descendente) entre el primer elemento (posicin generada por el
segundo ciclo) y el segundo elemento (posicin generada por el
segundo ciclo menos uno), si la respuesta a la condicin es
verdadera se realiza un intercambio entre los dos elementos.Para
realizar el intercambio se genera un almacenamiento temporal, el
cual guarda el dato del primer elemento, el segundo elemento toma
el lugar del primero y en el lugar del segundo se coloca lo que
contiene el almacenamiento temporal
Este tercer procedimiento es muy similar al anterior con la
diferencia que el elemento que va quedando es su lugar el primero
no el ltimo como en el caso anterior.QuickSort.El mtodo de
ordenamiento rpido o mtodo quicksort, es una tcnica basada en otra
conocida con el nombre divide y vencers, que permite ordenar una
cantidad de elementos en un tiempo proporcional a n2 en el peor de
los casos o a n log n en el mejor de los casos. El algoritmo
original es recursivo, como la tcnica en la que se basa.La
descripcin del algoritmo para el mtodo de ordenamiento quicksort es
la siguiente:Debe elegir uno de los elementos del arreglo al que
llamaremos pivote.Debe acomodar los elementos del arreglo a cada
lado del pivote, de manera que del lado izquierdo queden todos los
menores al pivote y del lado derecho los mayores al pivote;
considere que en este momento, el pivote ocupa exactamente el lugar
que le corresponder en el arreglo ordenado.Colocado el pivote en su
lugar, el arreglo queda separado en dos subarreglos, uno formado
por los elementos del lado izquierdo del pivote, y otro por los
elementos del lado derecho del pivote.Repetir este proceso de forma
recursiva para cada subarreglo mientras stos contengan ms de un
elemento. Una vez terminado este proceso todos los elementos estarn
ordenados. Para elegir un pivote se puede aplicar cualquiera de las
siguientes tres opciones:El pivote ser el primer elemento del
arreglo,El pivote ser el elemento que esta a la mitad del arreglo,
oQue el pivote se elija de entre tres elementos del arreglo
(cualesquiera), los cuales se deben comparar para seleccionar el
valor intermedio de los tres y considerarlo como el pivote. La
forma o tcnica de reacomodo de los elementos del lado izquierdo y
derecho del pivote, aplica el siguiente procedimiento que es muy
efectivo. Se utilizan dos ndices: izq, al que llamaremos ndice
inicial, y der, al que llamaremos ndice final. Conociendo estos
elementos el algoritmo quedara de la siguiente manera:Recorrer el
arreglo simultneamente con izq y der: por la izquierda con izq
(desde el primer elemento), y por la derecha con der (desde el
ltimo elemento).Mientras el arreglo en su posicin izq
(arreglo[izq]) sea menor que el pivote, continuamos el movimiento a
la derecha.Mientras el arreglo en su posicin der (arreglo[der]) sea
mayor que el pivote, continuamos el movimiento a la
izquierda.Terminando los movimientos se compara los ndices y si izq
es menor o igual al der, se intercambian los elementos en esas
posiciones y las posiciones se cambian izq a la derecha y der a la
izquierda.Repetir los pasos anteriores hasta que se crucen los
ndices (izq sea menor o igual a der).El punto en que se cruzan los
ndices es la posicin adecuada para colocar el pivote, porque
sabemos que a un lado los elementos son todos menores y al otro son
todos mayores (o habran sido intercambiados).ShellSort.El mtodo de
ordenacin shellsort es una versin mejorada del mtodo de ordenacin
por insercin directa, que se utiliza cuando el nmero de elementos
es grande. Este mtodo recibe su nombre gracias a su creados Donald
L. Shell, tambin se conoce con el nombre insercin con incrementos
decrecientes.En el mtodo de ordenacin por insercin directa, cada
elemento se compara con los elementos contiguos de su izquierda de
uno por uno, para lograr su ordenamiento; si por ejemplo, el
elemento a comparar es el ms pequeo y se encuentra en la ltima
posicin del arreglo, hay que ejecutar muchas comparaciones antes de
colocar el elemento en su lugar de forma definitiva.El mtodo de
ordenacin shellsort mejora el ordenamiento por insercin comparando
elementos separados por un espacio de varias posiciones. Esto
permite que un elemento haga pasos ms grandes hacia la posicin que
debe ocupar. Los pasos mltiples sobre los elementos se hacen con
tamaos de espacio cada vez ms pequeos y el ltimo paso del mtodo es
un simple ordenamiento por insercin directa, pero para entonces,
los elementos de arreglo ya casi estn ordenados.Para determinar el
tamao de los incrementos (saltos) constantes, el primero debe ser
generado a partir del tamao del arreglo entre dos, obteniendo solo
su parte entera de la divisin o redondeando el resultado de la
misma, y posteriormente ir reduciendo a la mitad el incremento en
cada repeticin, hasta que el incremento sea un uno.El procedimiento
para aplicar el algoritmo de shellsort es el siguiente:Generar un
ciclo que se encargue de controlar el tamao que deben tener los
incrementos.Este ciclo debe iniciar con la divisin del tamao del
arreglo entre dos.Mientras que el incremento sea mayor a cero debe
continuar.Y el cambio de incremento se elige de entre dos opciones:
un uno o la divisin del incremento anterior entre dos. Un segundo
ciclo dentro del anterior, controla el nmero de comparaciones que
se deben hacer segn el tamao del incremento.El control de este
ciclo debe iniciar con el incremento generado
anteriormente.Mientras el control del ciclo sea menor que el tamao
del arreglo.El control debe cambiar de uno en uno.Un tercer ciclo
dentro del segundo controla en que momento se detienen las
comparaciones o se hacen los posibles intercambios entre los
elementos.El control de este ciclo debe iniciar con el valor del
ciclo anterior.Mientras que el control sea mayor o igual al
incremento del primer ciclo y el elemento del arreglo de la posicin
del control de este ciclo menos el incremento, sea mayor que el
elemento del arreglo de la posicin control de este ciclo, realice
los intercambios entre estas posiciones.Y el control se decremente
con el valor del incremento. Algoritmos de ordenamiento por
distribucin.Los algoritmos de ordenamiento por distribucin, ordenan
el arreglo tomando cada nmero e insertndolo en la posicin que toma
su valor, es decir, si se tiene un cinco se coloca en la posicin
cinco del arreglo, algo as como: lo que valgas en esa posicin te
pongo. Esto indica que no se podrn ordenar los arreglos que tengan
valores repetidos y el arreglo necesita el tamao del nmero ms
grande que se encuentre en l.Lo que debemos hacer cuando se repitan
los datos es incrementar la capacidad de la posicin (urna). Para
lograrlo podemos hacer lo siguiente:Definir un arreglo en el que
cada posicin puede ser ocupada por ms de un elemento (arreglo
bidimensional) puede darse la situacin de ser insuficiente la
cantidad de posiciones adicionales o de existir demasiado
desperdicio de memoria.Definir el tamao de la urna variable a travs
del uso de estructuras de datos como las listas simples
enlazadas.Los algoritmos de ordenamiento por distribucin se
clasifican en:- CountingSort.- RadixSort.- BucketSort. Radix.El
mtodo de ordenacin radix es un algoritmo que ordena datos
procesando sus elementos de forma individual, segn la posicin que
ocupan dentro del dato. Los datos numricos los por dgitos y los
datos alfabticos por letras.El mtodo radix se clasifica en dos
tipos segn el orden en el que procesan los datos:- De derecha a
izquierda y- De izquierda a derecha.Si aplicamos este mtodo solo a
enteros, el mtodo se clasificara de la siguiente manera:- El digito
menos significativo (LSD, Least Significat Digit) y- El digito ms
significativo (MSD, More Significat Digit). El radix LSD procesa
los enteros iniciando por el digito menos significativo y movindose
al digito ms significativo (de derecha a izquierda).El radix MSD
procesa los enteros iniciando por el digito ms significativo y
movindose al digito menos significativo (de izquierda a derecha).El
mtodo ms aplicado de radix, es el LSD, y se encarga de colocar los
nmeros en una de las 10 colas que representan un digito cada una de
ella, iniciando desde la cola que controla el digito 0 hasta la
cola que controla el digito 9, en estas colas se colocan los nmeros
dependiendo del digito que se este analizando en ese momento, hasta
que termine con el nmero que contenga la mayor cantidad de dgitos,
en cada cambio de digito los elementos se integran al arreglo
nuevamente desde la cola 0 hasta la cola 9, para elegir el
siguiente digito de ordenamiento. Cuando se efecta este proceso
para cada dgito al arreglo est ordenado.El procedimiento para
aplicar el algoritmo de radix es el siguiente:
Determinar cul es la mayor cantidad de dgitos del elemento mayor
del arreglo.Crear un arreglo de colas, que permita almacenar cana
uno de los dgitos del 0 al 9.Crear cada posicin del arreglo como un
objeto que permita almacenar los elementos en cada cola, segn el
ndice que le corresponde.Generar un ciclo que determine el nmero de
digito que se esta procesando y el factor que permite encontrar el
digito.Inicializar el nmero de digito y el factor en uno;Mientras
el digito sea menor o igual a la cantidad de dgitos encontrados en
le paso uno.El nmero de digito se debe incrementar de uno en uno.
Crear un segundo ciclo que se encuentra dentro del anterior y que
se encarga de recorrer todo el arreglo desde la posicin inicial
hasta la final del arreglo.Iniciar el control del ciclo en
cero.Mientras el control sea menor al tamao del arreglo,
continuamos en el ciclo.El control del ciclo se cambia de uno en
uno. Generar un segundo ciclo que se encuentra dentro del primero,
al igual que el anterior y este controla el paso de los elementos
de las colas al arreglo nuevamente.El control de este ciclo inicia
desde la cola cero, al igual que el ndice que controla el arreglo
de los elementos.Mientras el control sea menor a diez continua
dentro del ciclo.El control del ciclo se incrementa de uno en uno.
Dentro del ciclo anterior se genera otro ciclo que se encarga de
colocar el contenido de cada cola dentro del arreglo original y su
condicin es que mientras la cola no este vaca retire los elementos
guardndolos en el arreglo e incrementar el ndice que controla el
arreglo. Ordenamientos con las clases Arrays y Collections de la
librera java.util.Java ofrece dos versiones de mtodos de ordenacin:
por arreglos (clase Arrays) y por listas (clase Collections).La
clase Arrays incluye mtodos para procesar arreglos, en particular,
mtodos para ordenar, buscar, llenar y transformar un arreglo a una
lista. Todos los mtodos de ordenacin en Arrays implementan una
versin del algoritmo de ordenacin rpida (quicksort); cada mtodo sea
plica a cada tipo definido por java a excepcin del tipo boolean.
Para cada tipo hay dos versiones, una para ordenar el arreglo
completo y otra para ordenar solo una parte del arreglo. La
sintaxis de cada versin es la siguiente: Arrays.sort(tipo[
]_arreglo); Arrays.sort(tipo[ ]_arreglo, int_inicio, int_fin);
La clase Collections incluye mtodos para procesar listas
enlazadas, dichos mtodos permiten ordenar, buscar, copiar, entre
otro mtodos. El mtodo de ordenacin implementado en esta clase es el
megasort y puede aplicarse a estructuras de tipo Vector, ArrayLista
y LinkedList. Est clase se compone de dos mtodos para el
ordenamiento cuya sintaxis es la siguiente:
Collections.sort(lista); Collections.sort(lista, Comparator
comp);Funcionamiento de los algoritmos de ordenamientoQuick
sortDados los siguientes nmerosPara implementar este mtodo se debe
de recibir como argumentos el vector con los nmeros, la posicin
inicial y la posicin final del vector (vec, inicio(0),final(9)).
Las posiciones recibidas de inicio y final se deben de respaldar
porque sus valores van cambiar durante la ejecucin del mtodo. Los
respaldos los llamaremos Izq y Der donde Izq tiene el valor
recibido en inicio y Der el valor recibido de final. Estas
variables se representan en el vector siguiente como las posiciones
inicial y final del vector respectivamente. Tambin se debe de sacar
un pivote que esta dado por la suma de la posicin inicial, final y
dividida entre
dos.Izq=0;inicio=0;Der=9;final=9;Pospivote=(inicio+final)/2=(0+9)/2=4;Pivote=vec[Pospivote]=vec[4]=70
Ya no se cumple el paso 4 por lo que se avanza al paso cinco: Ya
tenemos del lado izquierdo todos los nmeros menores a 70 y del lado
derecho los mayores a 70. Paso 5: Llamar de manera recursiva a el
mismo mtodo solo si inicio