algoritmos prototipo

25
METODOS DE ORDENAMIENTO Ordenación interna. Ordenar significa reagrupar o reorganizar un conjunto de datos u objetos en una secuencia específica, la cual puede ser de dos formas distintas: - Ascendente (menor a mayor) o - Descendente (mayor a menor). Los métodos de ordenación se clasifican en dos categorías: - Ordenación interna (de arreglos) y - Ordenación externa (de archivos). La ordenación 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 métodos de ordenación interna a su vez se clasifican en: - Métodos directos (n2) y - Métodos logarítmicos (n * log n). Los métodos directos, son los más simples y fáciles de entender, son eficientes cuando se trata de una cantidad de datos pequeña. Los métodos logarítmicos, son más complejos, difíciles de entender y son eficientes en grandes cantidades de datos. Los métodos directos más conocidos son: - Ordenación por intercambio. - Ordenación por inserción. - Ordenación por selección. Algoritmos de ordenamiento por intercambio. La ordenación 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 ordenación directa por intercambio que se analizaran son: - El método de la burbuja. - El método quicksort.

Upload: yovacg

Post on 07-Sep-2015

277 views

Category:

Documents


0 download

DESCRIPTION

algoritmo

TRANSCRIPT

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