Algoritmos de ordenación básicos

Documentos relacionados
Cómo implementar tus propias funciones en Lenguaje C?

Escribir programas a partir de un diagrama de flujo

Sintaxis de los aspectos generales de un lenguaje de programación

Recursividad. Figura 1. Cálculo del factorial de un número determinado.

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

ESTRUCTURA DE DATOS: Tema 5. Ordenamiento y Búsqueda

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera

EI MT1008 Programación II

Métodos de Ordenamiento

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

Métodos de Ordenamiento. Unidad VI: Estructura de datos

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

Lenguajes de programación

Cómo describir un diagrama de flujo en pseudocódigo?

Diagramas de flujo. Ejemplo 1. Algoritmo para sumar dos números

Estructura de datos. Carrera: SCC Participantes

Unidad 3. Estructuras de control en diagrama de Flujo y pseudocódigo Tema Iteración o Repetitivas (repite - mientras) Juan Pablo Cobá Juárez Pegueros

Versatilidad de la estructura de repetición for

Universidad Salesiana de Bolivia

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

Unidad 3. Estructuras de control en diagrama de Flujo y pseudocódigo Tema Iteración o Repetitivas (mientras)

Estructura repetitiva while

Cómo escribir algoritmos?

Universidad Tecnológica Nacional Facultad Regional San Francisco. Tecnicatura Superior en Programación PROGRAMACIÓN II

PLANTILLA DE LA GUÍA DIDÁCTICA DE LA ASIGNATURA

Programación Estructurada

Subdirección Académica Instrumentación Didáctica para la Formación y Desarrollo de Competencias Profesionales Periodo escolar: Agosto Diciembre 2017

Computadora y Sistema Operativo

En los siguientes ejemplos, usarás Solver para resolver los modelos y problemas de programación lineal planteados. 1 + x 2

Eduardo Andrés Medina Ramírez Angel Robles Pérez MÉTODO DE ORDENAMIENTO QUICKSORT

Calendario Académico año Introducción a la Programación I

Programación I. Carrera: ECM Participantes Participantes de las academias de ingeniería electrónica de los Institutos Tecnológicos.

SILABO DEL CURSO FUNDAMENTOS DE PROGRAMACIÓN

Tema: Vectores en C#

UNIVERSIDAD AUTÓNOMA DE CHIAPAS Facultad de Contaduría y Administración, Campus I

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

Análisis de rendimiento de algoritmos paralelos

PRESENTACIÓN DEL ALGORITMO

SYLLABUS de la Asignatura. Programación INF1201

PROGRAMA ANALÍTICO DE ASIGNATURA

Algoritmos de Ordenamiento

Tema: Vectores en C#.

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

Tema: Métodos de Ordenamiento. Parte 3.

Programación. Carrera: MAE 0527

OLIMPIADA DE INFORMÁTICA DEL ESTADO DE JALISCO. Problemando Avanzado de C++

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA DE SISTEMAS. Horas Contacto. Objetivos

Centro Universitario UAEM Zumpango! Ingeniería en Computación! Programación estructurada

TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES.

Tema: Métodos de Ordenamiento. Parte 1.

Carrera: EMZ Participantes Representante de las academias de ingeniería Electromecánica de los Institutos Tecnológicos.

SÍLABO DE ESTRUCTURA DE DATOS

ALGORITMOS, ESTRUCTURAS Y PROGRAMACION

La resolución de problemas es una tarea únicamente humana comprobable en todos los casos con los mismos resultados.

Planificaciones Algoritmos y Programación I. Docente responsable: CARDOZO MARTIN MIGUEL. 1 de 7

Nombre de la asignatura: Diseño Estructurado de Algoritmos. Carrera: Ingeniería en Sistemas Computacionales. Clave de la asignatura: SCB-9316

Planificaciones Algoritmos y Programación I. Docente responsable: CARDOZO MARTIN MIGUEL. 1 de 8

23. Ordenación de vectores (tablas) Diego Gutiérrez

SILABO DEL CURSO ALGORITMOS Y ESTRUCTURAS DE DATOS 1

Transcripción:

Algoritmos de ordenación básicos por Iván Cruz Cuando tratamos de resolver algunos problemas haciendo uso de la programación estructurada, en ocasiones es necesario poder ordenar un conjunto de datos. Ese ordenamiento puede requerir organizar la información de manera desendente o asendente, es decir, de mayor a menor o viceversa. Por ejemplo: Si se tiene un listado de promedios de un grupo de estudiantes y se desea contar con la información organizada en base a las calificaciones obtenidas, sería necesario ordenar los datos de acuerdo al rubro de promedio. Nombre Matrícula Promedio Juan Marín Vera 192789 85 Carolina Rey Masa 192364 70 Nora Raya Mares 192068 100 Tabla 1.- Datos deshordenados Nombre Matrícula Promedio Nora Raya Mares 192068 100 Juan Marín Vera 192789 85 Carolina Rey Masa 192364 70 Tabla 2.- Datos ordenados. Como podemos observar en las tablas anteriores, aparentemente realizar la ordenación para nosotros sería muy sencillo, sin embargo para llevar a cabo ese proceso dentro de un programa computacional las cosas se complican un poco, ya que sería necesario aplicar algunas operaciones de comparación e ir organizando poco a poco los datos. A través de esta lectura analizarás la forma de trabajar de algunos algoritmos que ya se encuentran desarrollados para llevar a cabo la ordenación de datos, así como su correspondiente codificación en lenguaje C. De acuerdo a Deitel (2004) existen varios algoritmos de ordenamiento entre los que podemos mencionar: heapsort, quicksort, mergesort, burbuja y burbuja mejorado. Todos estos algoritmos nos permiten ordenar datos, sin embargo el método burbuja es el más sencillo de implementar en un lenguaje de programación, aunque es considerado ineficiente, ya que es lento cuando se manejan grandes volúmenes de información. A continuación analizaremos el funcionamiento de las dos versiones del método burbuja. Algoritmo de ordenamiento burbuja El algoritmo de ordenamiento burbuja, es quizá el algoritmo de ordenamiento más ineficiente, pero a la vez es el fácil de implementar. 1

Su metodología se basa en comparar pares de números e ir intercambiando de lugar el número que sea mayor o menor según se esté ordenando de manera ascendente o descendente. Por lo tanto se compara uno por uno cada elemento del arreglo y se realizan intercambios de datos dentro del mismo arreglo si la condición planteada se cumple. En la Figura 1 se presenta de manera esquematizada como es que este algoritmo logra ordenar un conjunto de datos. Esta figura muestra que se deben utilizar n-1 iteraciones en una estructura de repetición, sabiendo de antemano que n representa el número total de elementos que posee el arreglo. Posteriormente se va realizando una comparación entre el valor de la posición actual con el valor de la posición contigua, en caso de requerir una ordenación ascendente la comparación se realiza con el signo de >, si se requiere el orden descendentemente el signo utilizado sería <, sólo en caso de que tal condición sea verdadera se procede al intercambio de los datos en las posiciones actuales del arreglo. Estos pasos se realizan de manera repetitiva hasta que se alcance la iteración final de la estructura de repetición utilizada. Figura 1. Esquema de trabajo del algoritmo de ordenamiento burbuja. El código fuente de este algoritmo se muestra en la Figura 2, el cual se divide en 4 segmentos 2

distinguibles como son, declaración de variables, ingreso de datos, método de la burbuja y despliegue de datos por pantalla. Figura 2. Código fuente en lenguaje C del algoritmo de ordenamiento burbuja. (Dev C++, 2005). a) Declaración de variables: se declararon 5 variables, la variable dimensión almacena el numero de posiciones de Arreglo que a su vez almacenará los datos ingresados por el usuario desde el teclado, la variable Temp, servirá para almacenar el valor de intercambio utilizado en la línea número 21, mientras que i así como también j, sólo se utilizan como índice de las estructuras de repetición utilizadas. b) Ingreso de datos por el teclado: En esta parte únicamente se reciben los datos que el usuario ingresa y son almacenados en su respectiva posición dentro de la variable Arreglo. c) Método de la burbuja: Este método utiliza 2 estructuras de repetición las cuales mientras que la primera controla el número de ocasiones que se repite el ordenamiento, la otra controla la comparación entre los datos posición por posición, mostrando además el procedimiento utilizado para realizar el intercambio de valores en caso de ser necesario. d) Despliegue de datos por pantalla: Únicamente se utiliza una estructura de repetición para desplegar por pantalla los datos almacenados en la variable Arreglo. Algoritmo de ordenamiento burbuja mejorado 3

El algoritmo de ordenamiento burbuja tiene como su principal desventaja, la cantidad de repeticiones que utiliza para ordenar un conjunto de datos, en la Figura 3, se presenta un esquema de la implementación que logra reducir en buena medida el tiempo computacional requerido por el método burbuja clásico, conocido como burbuja mejorado. Figura 3. Esquema de trabajo del algoritmo de ordenamiento burbuja mejorado. Se puede observar en la Figura 3, que en las iteraciones 2, 3 y 4, solo se realizo un solo intercambio de valores, lo que representa que de las 10 revisiones realizadas en total, solo son efectivas el 50% de ellas, lo que provoca un consumo de recursos innecesarios para la computadora, que se ve reflejado en el tiempo de espera del usuario, es importante resaltar que esto solo seria evidente ordenando una gran cantidad de datos. Aunque con la optimización que representa la burbuja mejorada, en este caso, solamente se redujo al 90% de las revisiones, lo cual implica un 10% de mejoría en el proceso del método, esta característica estiba en el hecho de que al no presentarse un solo intercambio en toda una iteración, entonces ya no existirá ningún cambio en el futuro debido a que ya se encuentran ordenados, esta característica seria muy benéfica en el caso en el que el usuario sin conocer los datos a ordenar, estos ya estuvieran ordenados, lo cual reduciría enormemente los cálculos computacionales. 4

Para analizar más técnicamente la característica distintiva entre estos 2 algoritmos se presenta el código fuente correspondiente a la burbuja mejorada en la Figura 4. Figura 4. Código fuente en lenguaje C del algoritmo de ordenamiento burbuja mejorado. (Dev C++, 2005). El código fuente de esta figura se puede analizar tomando en consideración los 4 aspectos fundamentales siguientes: 5

a) Declaración de variables: Únicamente se agregó la variable de tipo int bandera inicializada en cero. b) Ingreso de datos por el teclado: permanece exactamente igual que en el método de burbuja clásico. c) Método de burbuja mejorado: La gran aportación de este método radica en la variable declarada como bandera, la cual revisa en cada iteración si existió mínimo un intercambio de valores, si esto es cierto se reinicializa en cero para seguir cumpliendo con su tarea de verificación asignada. Si en la iteración que se encuentra verificando dicha variable se registra que no existió ningún intercambio de valores en el arreglo entonces eso significa que el arreglo ya se encuentra ordenado y por lo cual la variable bandera hace cumplir la condición de la estructura condicional if y se ejecuta la sentencia break, que termina la ejecución del ciclo, y por lo tanto el método ha llegado a su fin, dando paso al despliegue de datos por pantalla. d) Despliegue de datos por pantalla: permanece exactamente igual que en el método de burbuja clásico. Conclusión. A través de esta lectura se analizaron 2 algoritmos de ordenamiento conocidos como burbuja y burbuja mejorado, los cuales sirven como antes ala para poder comprender y realizar métodos de ordenamiento más complejos, eficaces y veloces tales como quicksort o mergesort por mencionar algunos. El problema de ordenar ascendente y/o descendentemente un conjunto de datos cobra importancia al realizar aplicaciones de sistemas de información, en las que el poder manipular grandes cantidades de datos es una actividad constante, motivo por el cual debe ser realizada de forma efectiva, confiable y veloz. Referencias Deitel, M. (2004). Cómo programar en C/C++ y Java (4ª. Ed.). México: Pearson Educación. [Versión en línea]. Recuperado el 29 de julio de 2010, de la base de datos de Bibliotechnia. Recurso disponible en la Biblioteca Digital de la UVEG. Sedgewick, R. (2000). Algoritmos en C++ (1ª. Ed.). México: Addison Wesley Longman. [Versión en línea]. Recuperado el 29 de julio de 2010, de la base de datos de Bibliotechnia. Recurso disponible en la Biblioteca Digital de la UVEG. Dev C++. (2005). Dev C++ (Ver. 5 (4.9.9.2)). Recuperado el 29 de julio de 2010 de http://www.bloodshed.net/index.html Software utilizado bajo licencia GPL. 6