Este documento describe varios métodos de ordenamiento interno como inserción directa, burbuja, quicksort, shellsort, ordenamiento por conteo y ordenamiento por distribución. Explica los pasos de cada algoritmo y provee ejemplos para ilustrar cómo funcionan.
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos
Unidad V: Métodos de Ordenamiento
Retícula ISIC-2010-224: Programa: AED-1026/2016
Algoritmos de Ordenamiento Externo.
Programacin 3. Universidad de Cuenca.
Abad F.,Munoz C.,Fajardo P.
Marco Teorico: Ordenamiento Directo, Polifase, Natural, Balanceada.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos
Unidad V: Métodos de Ordenamiento
Retícula ISIC-2010-224: Programa: AED-1026/2016
Algoritmos de Ordenamiento Externo.
Programacin 3. Universidad de Cuenca.
Abad F.,Munoz C.,Fajardo P.
Marco Teorico: Ordenamiento Directo, Polifase, Natural, Balanceada.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Presentación acerca de los algoritmos de ordenamiento de la asignatura de Programación 3 de la facultad de Ingeniería en Sistemas de la Universidad de Cuenca
Esta presentación le pertenece a Tania Landivar.
Las estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución, para evitar esto se hace uso de las listas enlazadas.
Una lista enlazada es una colección o secuencia de elementos llamados nodos, dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”.
Presentación acerca de los algoritmos de ordenamiento de la asignatura de Programación 3 de la facultad de Ingeniería en Sistemas de la Universidad de Cuenca
Las subcadenas son un concepto fundamental en la programación y desempeñan un papel crucial en la manipulación y análisis de cadenas de caracteres. Este conjunto de transparencias tiene como objetivo proporcionar una introducción clara y concisa a las subcadenas en el contexto del lenguaje de programación C, dirigido principalmente a estudiantes y programadores principiantes en el ámbito de la programación.
Las transparencias "Búsqueda de Subcadenas en C: Fundamentos de Programación" ofrecen una introducción clara y concisa a uno de los conceptos fundamentales en la programación en el lenguaje C: la búsqueda y manipulación de subcadenas. Este material didáctico se enfoca en proporcionar a estudiantes, principiantes y entusiastas de la programación una comprensión sólida de cómo trabajar con subcadenas en C, lo que es esencial para desarrollar habilidades de programación robustas.
Almacenamiento de informacion en una estructuraFernando Solis
Estas transparencias ofrecen una visión clara y concisa sobre uno de los conceptos fundamentales en el mundo de la programación: el almacenamiento de información en estructuras de datos. Desde el primer momento en que un programador se aventura en el desarrollo de software, entender cómo organizar y acceder a datos es esencial.
Estas transparencias están diseñadas para proporcionar una comprensión sólida de uno de los conceptos fundamentales en el mundo de la programación: la entrada y salida de datos. En cualquier lenguaje de programación, la capacidad de interactuar con el usuario y con el entorno es esencial para crear aplicaciones funcionales y útiles.
Estas transparencias están diseñadas para proporcionar una comprensión sólida y fundamental de dos conceptos esenciales en el mundo de la programación: la longitud (length) y la concatenación. Dirigidas a principiantes en la programación y estudiantes de cursos introductorios, estas diapositivas servirán como una guía clara y concisa para entender cómo trabajar con cadenas de texto y secuencias en programación.
Descripción general de las transparencias:
Esta presentación tiene como objetivo explorar en profundidad el proceso de lectura de datos de cadena, destacando su relevancia en diversos campos, desde la programación hasta el análisis de datos. A lo largo de estas transparencias, desglosaremos los conceptos clave, las técnicas y las mejores prácticas relacionadas con la manipulación de datos textuales.
Introducción a Tipos de Datos Abstractos (TDA)Fernando Solis
Las siguientes transparencias ofrecen una introducción esencial al fascinante mundo de los Tipos de Datos Abstractos (TDA). Los TDA son un concepto fundamental en la programación y la estructura de datos que permiten a los desarrolladores organizar y gestionar información de manera eficiente y coherente. Esta presentación proporcionará una visión general completa de los TDA, abordando los siguientes puntos clave:
Definición de Tipos de Datos Abstractos (TDA):
Explicación básica de qué son los TDA y su importancia en la programación.
Comparación entre datos abstractos y tipos de datos simples.
Características Fundamentales de TDA:
Encapsulación: Cómo los TDA ocultan los detalles internos de la implementación.
Abstracción: Cómo los TDA proporcionan una interfaz clara y definida para interactuar con los datos.
Operaciones y Comportamiento:
Exploración de las operaciones que se pueden realizar en TDA.
Ejemplos de implementación de TDA en lenguajes de programación comunes.
Ejemplos Prácticos:
Casos de uso reales que ilustran la utilidad de los TDA en la resolución de problemas.
Ejemplos de TDA comunes, como listas, pilas y colas.
Ventajas y Desventajas:
Análisis de las ventajas de utilizar TDA en el desarrollo de software.
Consideraciones sobre las limitaciones y desafíos potenciales.
Ejercicios y Aplicaciones:
Desafíos interactivos para que los participantes practiquen la creación y uso de TDA.
Aplicaciones prácticas en el mundo real, desde bases de datos hasta algoritmos avanzados.
Evolución de los TDA:
Una visión histórica de cómo han evolucionado los TDA y su relevancia en la actualidad.
Tendencias actuales y futuras en el campo de los TDA.
Recursos Adicionales:
Recomendaciones de lecturas y recursos en línea para aquellos que deseen profundizar en el tema.
Las trasparencias que presentaremos hoy se centran en una comparativa esencial en el mundo de la informática: archivos binarios y archivos de texto. Ambos tipos de archivos son fundamentales en el almacenamiento y procesamiento de datos, pero ¿cuál es la opción más adecuada para cada situación?
En esta presentación, exploraremos las diferencias fundamentales entre archivos binarios y archivos de texto, y analizaremos las ventajas y desventajas de cada uno. Los participantes obtendrán una comprensión sólida de cuándo y por qué elegir uno sobre el otro, así como consejos prácticos para tomar decisiones informadas en su trabajo con datos y programación.
En el mundo de la programación y la informática, las cadenas o strings son uno de los conceptos fundamentales. Estas transparencias explorarán en detalle qué son las cadenas, cómo se definen y utilizan en diferentes lenguajes de programación, y por qué son esenciales en el desarrollo de software.
Declaración e inicialización de variables de tipo cadenaFernando Solis
En el mundo de la programación, las variables de tipo cadena (también conocidas como "strings") desempeñan un papel fundamental. Estas variables nos permiten almacenar y manipular texto, lo que resulta esencial en el desarrollo de aplicaciones y programas. En estas transparencias, exploraremos en detalle cómo declarar y inicializar variables de tipo cadena en diversos lenguajes de programación, así como las mejores prácticas para su uso.
¿Alguna vez te has preguntado cómo transformar y manipular cadenas de texto de manera efectiva en la programación? Las conversiones de strings son una habilidad esencial para cualquier desarrollador, y estas transparentes te llevarán a un fascinante viaje por el mundo de la manipulación de cadenas.Nuestra serie de transparencias sobre la "Conversión de Strings" tiene como objetivo brindar una comprensión profunda y práctica de los conceptos clave relacionados con las cadenas de texto en la programación. Exploraremos diversas técnicas y estrategias para convertir, modificar y analizar cadenas de texto de manera eficiente.
Las cadenas de texto (Strings) son elementos fundamentales en la programación y se utilizan en una variedad de aplicaciones, desde el procesamiento de texto hasta la manipulación de datos. En esta presentación, exploraremos diferentes enfoques para comparar arreglos de cadenas en el contexto de la programación. A lo largo de estas diapositivas, analizaremos métodos, consideraciones y ejemplos prácticos para ayudar a los desarrolladores a tomar decisiones informadas al comparar cadenas en sus proyectos.
Las "Cadenas y/o Strings como Parámetros de Funciones" son una inmersión profunda en el fascinante mundo de la programación de cadenas de texto. Estas trasparencias están diseñadas para proporcionar a los desarrolladores, tanto principiantes como experimentados, una comprensión completa de cómo trabajar con cadenas y cómo utilizarlas de manera eficiente como parámetros en funciones.
En el mundo de la programación, las cadenas de texto o "strings" desempeñan un papel fundamental. Son utilizadas para almacenar y manipular información textual, desde nombres y direcciones hasta mensajes y contenido web. Esta presentación se sumergirá en el fascinante mundo de las cadenas de texto, centrándose en la asignación de datos de tipo string y la gestión de variables de tipo string.
Las trasparencias sobre ofrecen una visión completa y detallada sobre uno de los conceptos fundamentales en programación y diseño de software. Este tema es esencial para cualquier desarrollador que busque comprender cómo trabajar con tipos de datos abstractos y cómo acceder a sus miembros de manera efectiva.
Las transparencias sobre "Arreglo Orden Selección" en programación son una herramienta educativa que presenta un algoritmo de clasificación sencillo pero importante. En este enfoque, se explora cómo ordenar una lista de elementos en orden ascendente o descendente seleccionando de manera iterativa el elemento más pequeño (o grande) restante y colocándolo en su posición correcta en el arreglo.
Las transparencias sobre "Algoritmos de Búsqueda" en programación brindan una visión fundamental de las técnicas empleadas para encontrar elementos en conjuntos de datos, un concepto esencial en la resolución de problemas.
Las transparencias sobre "Quick Sort" en programación proporcionan una visión general de uno de los algoritmos de ordenación más eficientes y ampliamente utilizados. Estas transparencias explican cómo funciona el algoritmo, destacando su enfoque en la estrategia de "dividir y conquistar".
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...JAVIER SOLIS NOYOLA
El Mtro. JAVIER SOLIS NOYOLA crea y desarrolla el “ROMPECABEZAS DE ECUACIONES DE 1ER. GRADO OLIMPIADA DE PARÍS 2024”. Esta actividad de aprendizaje propone retos de cálculo algebraico mediante ecuaciones de 1er. grado, y viso-espacialidad, lo cual dará la oportunidad de formar un rompecabezas. La intención didáctica de esta actividad de aprendizaje es, promover los pensamientos lógicos (convergente) y creativo (divergente o lateral), mediante modelos mentales de: atención, memoria, imaginación, percepción (Geométrica y conceptual), perspicacia, inferencia, viso-espacialidad. Esta actividad de aprendizaje es de enfoques lúdico y transversal, ya que integra diversas áreas del conocimiento, entre ellas: matemático, artístico, lenguaje, historia, y las neurociencias.
2. 6. ORDENACIÓN INTERNA
Algoritmos de ordenamiento por intercambio
Burbuja
Quicksort
Shellsort
Algoritmos de ordenamiento por distribución
Radix
3. INSERCIÓN DIRECTA
• Este método consiste en buscar el lugar adecuado para cada registro
recorriendo los registros anteriores para dejar un lugar vacío para el
nuevo elemento. El proceso de acomodo de cada elemento se repite
hasta llegar al último elemento, los elementos previos al elemento a
acomodar se encuentran en orden.
• Este es el método usado por los jugadores de cartas para acomodar su
juego.
4. ORDENAMIENTO POR INSERCIÓN
DIRECTA
Variables
– K arreglo de datos a ordenar
– V variable auxiliar
– i, j índices para el arreglo
– N número de elementos
InserciónDirecta
Inicio
Para i=2 hasta N incremento 1
v = K(i) //elemento a acomodar
j = i
Mientras (j > 1) y (K(j-1) > v)
K(j) = K(j-1) //mueve elementos
j = j-1
K(j) = v // inserta el elemento actual
Fin
3 8 2 1 4
1 2 3 4 5 6
2K
3 8
2 3 8
1 2 3 8
1 2 3 4 8
1 2 2 3 4 8
5. BURBUJA (BUBBLE)
• Este método realiza comparaciones de todas las posibles parejas de
llaves intercambiando aquellas que se encuentran fuera de orden.
• Utiliza un proceso repetitivo comparando las parejas de datos
adyacentes del inicio al final del arreglo donde, después de la primer
pasada la llave mayor queda en la última posición del arreglo.
6. BURBUJA (BUBBLE)
Variables
• n es el total de elementos
• K arreglo de llaves
• t variable auxiliar para el intercambio
• i,j variables para los indices
Burbuja
Inicio
para i= n-1 ; i>0 ; i--
para j=0; i>j; j++
si (k[j] > k[j+1])
t = k[j];
k[j]= k[j+1];
k[j+1] = t;
Fin
3 8 2 1 4
0 1 2 3 4 5
2
3 8 2 1 4 2
3 2 8 1 4 2
3 2 1 8 4 2
3 2 1 4 8 2
3 2 1 4 2 8
Primera
pasada
8. SHELL SORT
• El método shell divide el arreglo a ordenar en varios grupos
haciendo comparaciones e intercambios entre ellos. El tamaño
de los subgrupos se decrementa y el número de subgrupos se
incrementa hasta llegar a tener n grupos de tamaño 1. A partir
de este punto, el método funciona como el de inserción directa.
• El tamaño de los subgrupos así como el total de estos puede
determinarlos el usuario para hacer mas eficiente el algoritmo.
9. SHELL SORTVariables
– K arreglo de datos a ordenar
– H tamaño del grupo
– i, j índices para el arreglo
– V variable auxiliar
– N número de elementos
– grupo arreglo con los tamaños de grupo
Shellsort
Inicio
grupo = [ 21, 7, 3, 1]
para g=0; g<4; g++
h=grupo[g];
para i=h; i<n; i++
v=k[i];
j=i;
mientras (j>=h && a[j-h]>v)
k[j]=k[j-h];
j=j-h;
k[j]=v;
Fin
3 7 9 0 5 1 6 8 4 2 0 6 1 5 7 3 4 9 8 2
3 7 9 0 5 1 6 8 4 2 0 6 1 5 7 3 4 9 8 2
3 3 2 0 5 1 5 7 4 4 0 6 1 6 8 7 9 9 8 2
3 3 2 5 7 4 1 6 80 5 1 4 0 6 7 9 9 8 2
0 0 1 3 3 4 5 6 81 2 2 4 5 6 7 7 9 8 9
0 0 1 1 2 2 3 3 4 4 5 6 5 6 8 7 7 9 8 9
0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
10. RADIX
• Radix Sort (ordenamiento Radix) es un algoritmo de
ordenamiento estable* para ordenar elementos identificados
por llaves (o claves) únicas. Cada llave debe ser una cadena o
un número capaz de ser ordenada alfanuméricamente.
• Este método ejecuta un número de repeticiones igual al número
de caracteres de las llaves a ordenar. El Radix Directo, inicia
con el dígito más a la derecha repartiendo los datos en
“canastas”, estos datos se reparten de nuevo de acuerdo al
siguiente dígito y así sucesivamente hasta terminar con el dígito
de mas a la izquierda.
15. DESCRIPCIÓN
• Se elige un pivote.
• Se reubican los elementos respecto al pivote los
menores antes, los mayores atrás.
• El arreglo queda separado en dos subarreglos
• Se repite el proceso con los subarreglos
resultantes
• El arreglo esta ordenado
16. DEMOSTRACIÓN
• Suponiendo que el número total de elementos a ordenar es
potencia de dos, es decir, n = 2k. De aquí podemos ver que k =
log2(n), donde k es el número de divisiones que realizará el
algoritmo.
• En la primera fase del algoritmo habrán n comparaciones, en la
segunda fase el algoritmo creará dos sublistas
aproximadamente de tamaño n/2. El número total de
comparaciones de estas dos sublistas es: 2(n/2) = n. En la
tercera fase el algoritmo procesará 4 sublistas más, por tanto el
número total de comparaciones en esta fase es 4(n/4) = n.
• En conclusión, el número total de comparaciones que hace el
algoritmo es:
17. TÉCNICAS DE ELECCIÓN DE PIVOTE
• El algoritmo básico del método Quicksort consiste en tomar
cualquier elemento de la lista al cual denominaremos como
pivote, dependiendo de la partición en que se elija, el algoritmo
será más o menos eficiente.
• Tomar un elemento cualquiera como pivote tiene la ventaja de
no requerir ningún cálculo adicional, lo cual lo hace bastante
rápido. Sin embargo, esta elección «a ciegas» siempre provoca
que el algoritmo tenga un orden de O(n²) para ciertas
permutaciones de los elementos en la lista.
• Otra opción puede ser recorrer la lista para saber de antemano
qué elemento ocupará la posición central de la lista, para
elegirlo como pivote.
18. ORDENAMIENTO POR
CONTEO
• Este método utiliza un arreglo auxiliar para contabilizar el
numero de llaves que son mayores que la llave actual.
• El arreglo de contadores, especifica la posición final donde
debería estar cada elemento.
19. ORDENAMIENTO POR
CONTEO
Variables
– K arreglo de datos a ordenar
– Cont arreglo de contadores
– N número de elementos a ordenar
ComparacionPorConteo
Inicio
inicializar el arreglo de contadores con cero en todas sus posiciones
Para i=N hasta 2 decremento 1
Para j=i-1 hasta 1 decremento 1
si K(i) < K(j) Cont(j)++
sino Cont(i)++
Fin
21. ORDENAMIENTO POR
DISTRIBUCIÓN
• Este método es bueno aplicarlo cuando existen muchas claves
repetidas y estas se encuentran en un rango pequeño entre u y
v.
Rango u<=K1..n<=v
• Utiliza un arreglo contador con posiciones desde u hasta v,
además de un arreglo para generar la salida.
22. ORDENAMIENTO POR
DISTRIBUCIÓNVariables
– K arreglo de datos a ordenar
– Cont arreglo de contadores con índices desde u hasta v
– S arreglo de salida
– N número de elementos a ordenar
– U llave menor
– V llave mayor
Distribución
Inicio
inicializar el arreglo de contadores con cero en todas sus posiciones
Para i=1 hasta N incremento 1
Cont(K(i))++ // cuenta las llaves iguales
Para j=u+1 hasta v incremento 1
Cont(j) = Cont(j) + Cont(j-1) // localiza la posición de cada llave
Para j=N hasta 1 decremento 1
i = Cont(K(j))
S(i) = K(j) // envía la llave al vector de salida
Cont(K(j)) = Cont(K(j)) - 1
Fin
23. EJEMPLO
29 31 29 34 29
1 2 3 4 5
Arreglo a ordenar K
Arreglo de contadores
Cont
Arreglo de salida S 29 34
Inicial
Cuenta llaves repetidas
Posición de cada llave
Acomodo en la salida
0 0 0 0 0
29 30 31 32 33 34
3 0 1 0 0
3 3 4 4 4
0
1
5
2 3 4 4 4 4
1 2 3 4 5
24. EJERCICIOS PARA REALIZAR
• Ingresar 10 números aleatorios y ordenarlos por los siguientes
métodos
– Quicksort
– Shell
– Insercion