Beruflich Dokumente
Kultur Dokumente
Una estructura de datos es una coleccin de datos organizados de una cierta manera, y que se
caracterizan por las operaciones que se definen sobre ellas.
Las estructuras de datos son muy importantes en los sistemas de computadora.
Las estructuras de datos se clasifican en estticas y dinmicas. Esta clasificacin se basa en la
forma de gestionar la memoria de sistema para almacenar un conjunto de elementos del mismo
tipo.
Las estructuras estticas, la memoria se gestiona en tiempo de compilacin, mientras que para las
estructuras dinmicas la memoria se gestiona en tiempo de ejecucin. La forma de generar los
almacenamientos implican ventajas y desventajas, ambos tipos de estructuras existen en los
lenguajes reales, el uso ms conveniente de una forma u otra depender de los requerimientos
del problema a resolver.
Dentro de las estructuras estticas, se encuentran los arreglos (cualquiera sea el nmero de
dimensiones que tenga) y los registros (estas son colecciones de elementos que pueden ser de
distinto tipo, los cuales se vern ms adelante).
Dentro de las estructuras dinmicas se encuentran: pila, cola, lista simplemente enlazada, lista
doblemente enlazada, listas circulares, rboles, grafos. En todas ellas, se almacena el dato
genuino 8 por ejemplo alturas de personas) ms otro tipo de informacin que ayuda a formar la
estructura de datos de una forma particular.
En programacin, un arreglo, es un conjunto finito de elementos del mismo tipo (homogneos)
que ocupa un espacio o zona de almacenamiento en memoria dinmica fsicamente contiguo.
Los arreglos pueden ser unidimensionales tambin llamados vectores (o arreglos lineales), o
bidireccionales (matrices) o multidimensionales.
Todo arreglo unidimensional o vector tiene asociado un nico nombre o identificador. Cada
elemento es referenciado por la posicin que ocupa dentro del vector. Dichas posiciones son
llamadas ndice y siempre son correlativos.
Los vectores se pueden representar grficamente como muestra la figura1, es decir como un
rectngulo dividido en tantas partes iguales como elementos tiene el vector o arreglo
unidimensional. La figura 1 representa un arreglo unidimensional llamado Dato de 4 elementos.
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
-1-
El nombre o identificador sirve para todos los elementos del conjunto, el valor del subndice
asociado identifica en forma precisa a alguno de esos elementos.
Dato [ 1]
Dato [ 2]
Dato [4]
Dato [3]
Figura 1
El nmero de elementos de un vector se llama rango del vector. En el caso de la figura 1, el rango
del vector llamado Dato, es 4.
Los arreglos en general pueden contener datos numricos y no numricos, por ejemplo se puede
pensar en un arreglo de carcter. La figura 2, muestra un arreglo de tipo carcter de 5 elementos,
llamado Info.
Info [ 1]
Info [ 2]
Info [3]
Info [4]
Info [5]
Figura 2
Otro ejemplo de un arreglo unidimensional no numrico, puede ser un vector que contiene los
nombres de los 8 alumnos de un curso, entonces el vector se llama Alumno y su rango es de 8.
En la figura 3 se muestra el vector Alumno.
Cada elemento de un vector se puede procesar como si fuese una variable simple al ocupar una
posicin de memoria. Por ejemplo:
Dato [4] 3
Almacena el valor entero o real 3 en el vector Dato en la posicin nmero 4 (dato debe ser de tipo
entero o real).
La instruccin:
escribir (Dato [4])
muestra por pantalla el contenido de la posicin 4 del vector llamado Dato.
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
-2-
Los arreglos cualquiera sea su dimensin necesitan ser dimensionados previamente a su uso
dentro de un programa.
Alumno
Luis
Jose
Sonia
Pedro
Celeste
Toms
Sonia
Pedro
Figura 3
-3-
-4-
vector2: vec2
entero: ndice
inicio
..
Los arreglos se utilizan cuando es necesario almacenar varios valores. Tambin se podran
guardar valores en un conjunto de variables simples, pero esto es ms engorroso, y ms complejo
de manejar. En lugar de tener 10 variables de tipo real para guardar las alturas de personas, es
ms sencillo crear un arreglo de 10 elementos de tipo real, ya que toda la informacin la manejo
con el mismo nombre de variable; y los elementos se diferencian entre s segn el valor que
asuma un subndice asociado al vector.
En la prctica suele ser necesario procesar conjuntos de datos, como por ejemplo listas de
alumnos, docentes, cuentas bancarias, etc. Por ejemplo si necesitase procesar datos de 5000
alumnos respecto al promedio de inasistencia de ellos, deberamos tener 5000 variables simple,
cada una de ellas contendra un entero que represente este dato (inasistencias). Si por ejemplo se
quisiese ordenar los alumnos por nmero creciente de inasistencias, para por ejemplo otorgarles
un premio, sera imperioso tener todos los datos activos en memoria, y necesitara otra variable
para indicar el orden de los datos (5000 variables enteras ms). Mientras que con un arreglo
unidimensional de 5000 elementos de tipo entero sera suficiente para contener los datos y una
variable ms de tipo entero para indicar el orden dentro del arreglo (subndice). Ordenado los
datos de menor a mayor, en la primer posicin del arreglo (ndice = 1) tendra la menor
inasistencia y en la ltima posicin tendra el nmero ms grande correspondiente al mayor
nmero de falta (ndice = 5000).
Como queda explicado con esta breve reflexin, es necesario que los lenguajes de programacin
brinden soporte para mantener juntos (referenciados mediante un mismo identificador)
colecciones de de datos del mismo tipo.
-5-
Asignacin
Lectura/escritura
Recorrido
Ordenacin bsqueda
-6-
..
..
En el trozo de cdigo anterior se declara un arreglo lineal de 10 elementos de tipo entero, la
variable para manejar la coleccin de datos se llama origen. La estructura repetitiva desde/findesde, itera 10 veces para asignar desde el teclado 10 valores enteros al arreglo, uno por cada
posicin del mismo.
LECTURA /ESCRITURA DE DATOS
Las operaciones de lectura y escritura de los elementos de un arreglo lineal generalmente se
realizan con estructuras repetitivas, aunque tambin pueden hacerse con estructuras selectivas
(depender de los requerimientos).
-7-
fin-desde
fin
Ejemplo 1) Se desea crear un algoritmo en pseudocdigo que permita ingresar 10 valores enteros
por teclado, y los guarde en un arreglo unidimensional. Luego recorrerlo y mostrar los valores que
ocupan las posiciones pares por pantalla.
Algoritmo Muestra_posi_par
tipo
array [1..10] de entero : dato
var
dato : origen
entero: ndice
inicio
escribir ( ingresar los 10 elementos del arreglo)
desde ndice 1 hasta 10 hacer //se toman los valores del teclado
leer ( origen [ndice])
fin-desde
escribir ( Se muestran los elementos de las posiciones pares del arreglo lineal)
desde ndice 2 hasta 10 inc 2 hacer // se muestran por pantalla los datos del arreglo lineal
escribir (origen [ndice])
fin-desde
fin
Ejemplo 2) Se desea crear un algoritmo en pseudocdigo que permita ingresar 20 valores enteros
por teclado, y los guarde en un arreglo unidimensional. Luego recorrerlo y mostrar los valores
positivos que sean pares por pantalla.
Algoritmo Muestra_positivos_par
tipo
array [1..20] de entero : dato
var
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
-8-
dato : vec
entero: ndice
inicio
escribir ( ingresar los 20 elementos del arreglo)
desde ndice 1 hasta 20 hacer //se toman los valores del teclado
leer ( ver [ndice])
fin-desde
escribir ( Se muestran los elementos positivos pares)
desde ndice 1 hasta 20 hacer // se recorre los datos del arreglo lineal
si (vec [ndice] > 0) y (vec [ndice] mod 2 = 0) entonces
mostrar (vec[ndice])
fin-si
fin-desde
fin
Ejemplo 3) Se desea crear un algoritmo en pseudocdigo que permita ingresar 20 valores enteros
por teclado, y los guarde en un arreglo unidimensional. Luego recorrerlo y mostrar los valores
positivos que sean pares por pantalla.
Algoritmo Muestra_positivos_par
tipo
array [1..20] de entero : dato
var
dato : vec
entero: ndice
inicio
escribir ( ingresar los 20 elementos del arreglo)
desde ndice 1 hasta 20 hacer //se toman los valores del teclado
leer ( ver [ndice])
fin-desde
escribir ( Se muestran los elementos positivos pares)
desde ndice 1 hasta 20 hacer // se recorre los datos del arreglo lineal
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
-9-
- 10 -
fin-desde
fin
Ejemplo 5) Se desea crear un programa que permita guardar 15 caracteres tomados desde el
teclado, el algoritmo deber contar cuantas letras son maysculas. Mostrar este resultado por
pantalla.
Algoritmo Cuenta_Maysculas
tipo
array [1..15] de caracter : dato
var
dato : ar
entero: ndice, cant_May
inicio
cant_May 0
escribir ( ingresar los 15 caracteres del teclado)
desde ndice 1 hasta 15 hacer //se toman los valores del teclado
leer ( ar [ndice])
fin-desde
// Se detectan y cuentan las letras maysculas
desde ndice 1 hasta 15 hacer
si ((ar [ndice] > A) y ( ar[ndice] < Z0)) entonces
cant_May cant_May +1
fin-si
fin-desde
escribir (La cantidad de letras maysculas del arreglo es:, cant_May)
fin
- 11 -
Fila 1
Fila 2
Fila 3
Fila 4
Fila 5
Columna 3
Columna 2
Columna 1
Figura 4
En notacin estndar el primer subndice hace referencia a las filas, y el segundo a los elementos
de las columnas del arreglo. Es decir Tabla [2,3] es el elemento Tabla que ocupa la posicin
segunda fila, tercer columna, como se indica en la figura 5.
El arreglo Tabla se dice que tiene 5 por 3 elementos.
En pseudocdigo los arreglos bidimensionales se declaran de la siguiente forma:
Algoritmo Declaracion_ArregloBidimensional
tipo
array [1..5,1..3] de enteros : T
var
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 12 -
T : Tabla
entero: j,k
inicio
..
Tabla
Fila 1
Fila 2
Tabla[2,3]
Fila 3
Fila 4
Fila 5
Columna 3
Columna 2
Columna 1
Figura 5
- 13 -
nota-alu
Fila 1
Fila 2
Fila 3
Fila 4
10
10
10
Fila 5
1
3
10
10
10
7
8
Columna 1
matemtica
Columna 3
Columna 2
historia
lengua
Figura 6
Tambin son tiles para representar los elementos de un almacn, por ejemplo. Los saldos en
cuentas bancarias, o en distintos tipos de cuentas bancarias de un mismo cliente, etc.
- 14 -
Para leer datos desde el teclado, guardarlos en un arreglo bidimensional, y luego recorrerlo para
mostarlo, se realiza lo siguiente:
Algoritmo Declaracion_ArregloBidimensional1
tipo
array [1..5,1..3] de enteros : T
var
T : Tabla
entero: i,j
Inicio
desde i 1 hasta 5 hacer
desde j 1 hasta 3 hacer
leer ( Tabla [i,j]
fin-desde
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 15 -
fin-desde
// se recorre el arreglo para mostrar los elementos almacenados por pantalla
desde i 1 hasta 5 hacer
desde j 1 hasta 3 hacer
escribir ( Tabla [i,j]
fin-desde
fin-desde
fin
Por cada valor que toma la variable i, el bucle interno ocurre completamente, es decir por cada
valor que asume la variable i, j toma los valores de 1 a 3.
- 16 -
fin-desde
fin-desde
//se calcula el promedio general
desde i 1 hasta 10 hacer
desde j 1 hasta 2 hacer
total total + mat [i, j]
fin-desde
fin-desde
escribir ( el promedio general es: , total / 20)
total 0
total2 0
escribir ( Se calculan los promedios por materia)
desde i 1 hasta 10 hacer
total total + mat [i,1]
total2 total2 + mat [i, 2]
fin-desde
escribir ( el promedio en fsica es: , total/10, el promedio en matemtica es:, total2/ 10)
fin
Ejemplo 2) Se desea crear un algoritmo en pseudocdigo que permita leer una tabla con
temperaturas. La tabla tiene 5 filas correspondientes a 5 momentos distintos del da, y tiene 3
columnas correspondientes a 3 das distintos. Se desea detectar la temperatura mnima y la
mxima de la tabla completa. Mostrar los valores hallados por pantalla.
Algoritmo Muestra_mn_mx
tipo
array [1..5, 1..3] de real : matriz
var
matriz : mat
entero: i, j
real: mi, ma
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 17 -
inicio
escribir ( ingresar los 15 elementos de la tabla)
desde i 1 hasta 5 hacer //se toman los valores del teclado
desde j 1 hasta 3 hacer
leer ( mat [i, j])
fin-desde
fin-desde
escribir ( Se detecta el mnimo y el mximo)
ma mat [1, 1]
mi mat [1, 1]
desde i 1 hasta 5 hacer
desde j 1 hasta 3 hacer
si mat [i, j] > max entonces
ma mat [i, j]
fin-si
si mat [i, j]< mi entonces
mi mat [i, j]
fin-si
fin-desde
fin-desde
mostrar (la temperatura mnima es: , mi, la temperatura mxima es:, ma)
fin
Ejemplo 3) Se desea crear un algoritmo en pseudocdigo que permita obtener el nmero de
elementos positivos de una tabla de m x n. Mostrar el valor hallado por pantalla.
Algoritmo Muestra_positivos
tipo
array [1..50, 1..50] de entero : matriz
var
matriz : ma
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 18 -
- 19 -
- 20 -
Ejemplo 5) Se desea crear un programa que permita guardar 16 caracteres tomados desde el
teclado, en un arreglo bidimensional de 4 x 4. Se solicitar el ingreso del nmero de fila desde el
teclado, el programa mostrar por pantalla todos los elementos de esa fila.
Algoritmo Muestra_fila
tipo
array [1..4, 1..4] de caracter : dato
var
dato : ar
entero: i, j, fila
inicio
escribir ( ingresar los 16 caracteres del teclado)
desde i 1 hasta 4 hacer //se toman los valores del teclado
desde j 1 hasta 4 hacer
leer ( ar [i, j])
fin-desde
fin-desde
mostrar ( Introducir una fila entre 1 y 4)
repetir
leer ( fila)
hasta-que fila >=1 y fila < =4
escribir (Los elementos de la fila: , fila, son:)
desde i 1 hasta 4 hacer
mostrar ( ar [fila, j])
fin-desde
fin-desde
fin
- 21 -
Ejemplo 1) Leer una tabla de 3 x3. Declarar dos arreglos unidimensionales uno llamado fila y otro
columna, en estos arreglos se guardarn los totales de las filas y los totales de las columnas de la
tabla de 3 x 3. Luego mostrar por pantalla los arreglos lineales.
Algoritmo Suma_fila_columna
tipo
array [1..3, 1..3] de entero : Mat
array [1..3] de entero :vector
var
Mat : ma
vector: vec1, vec2
entero: i, j, suma
inicio
escribir ( ingresar los 9 elementos del teclado)
desde i 1 hasta 3 hacer //se toman los valores del teclado
desde j 1 hasta 3 hacer
leer ( ma [i, j])
fin-desde
fin-desde
// se completa el arreglo fila
Suma 0
desde i 1 hasta 3 hacer
desde j 1 hasta 3 hacer
suma suma + ma [i, j])
fin-desde
vect1[i] suma
suma 0
fin-desde
// se completa el arreglo columna
Suma 0
desde j 1 hasta 3 hacer
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 22 -
- 23 -
Ejemplo 3) Crear una lista con N temperaturas almacenadas. Se desea calcular la media y crear
otro arreglo con los valores mayores a la media. Luego mostrar por pantalla los elementos de los
arreglos lineales.
Algoritmo vector-media
tipo
array [1..50] de real : vector
var
vector: origen, destino
entero: i, N
real: suma, media
inicio
escribir ( ingresar el nmero de elementos que tendr el arreglo)
leer (N )
escribir (Ingresar los elementos del arreglo lineal)
desde i 1 hasta N hacer //se toman los valores del teclado
leer ( origen [i ])
fin-desde
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 24 -
// se calcula la media
Suma 0
desde i 1 hasta N hacer
suma suma + origen [ i ]
fin-desde
media suma / N
j0
//se comparan los elementos del arreglo origen con la madia
desde i 1 hasta N hacer
si origen [ i ] > media entonces
j j+1
destino [j ] origen [ i]
fin-si
fin-desde
mostrar ( se muestra el arreglo origen )
desde i 1 hasta N hacer //se toman los valores del teclado
escribir ( origen [i ])
fin-desde
mostrar ( se muestra el arreglo destino )
desde i 1 hasta j hacer //se toman los valores del teclado
mostrar ( destino [i ])
fin-desde
fin
Ejemplo 4) Crear una lista con N nombres de alumnos. Se desea introducir un nombre de alumno
por teclado 10 veces, y mostrar un mensaje adecuado si el nombre est en la lista.
Algoritmo Lista-nombre
tipo
array [1..50] de cadena : vector
var
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 25 -
vector: vec
entero: i, cant
cadena: nom
inicio
repetir
escribir ( ingresar el nmero de elementos que tendr el arreglo)
leer (N )
hasta-que N>=1 y N <= 50
escribir (Ingresar los elementos del arreglo lineal)
desde i 1 hasta N hacer //se toman los valores del teclado
leer ( vec [i ])
fin-desde
cant 0
mientras cant < 10 hacer
escribir (Ingresar un nombre de alumno a buscar en la lista
leer ( nom)
desde i 1 hasta N hacer
si vec [ i ] = nom entonces
mostrar ( el nombre:, nom, est en la lista)
si-no
mostrar (el nombre:, nom, no est en la lista)
fin-si
fin-desde
cant cant + 1
fin-miesntras
fin
Bibliografa Obligatoria:
- 26 -
CONCEPTOS PRELIMINARES
Antes de comenzar a ver cada algoritmo vamos a ponernos de acuerdo en algunos conceptos,
para que no haya confusiones:
Clave: La parte de un conjunto de datos (registro), por la cual se ordena la lista. Por ejemplo, una
lista de registros, en la que cada registro de esa lista tiene tres campos diferentes: nombre,
direccin y telfono se puede ordenar alfabticamente de acuerdo a la clave nombre. En este
caso los campos direccin y telfono no se toman en cuenta en el ordenamiento.
Criterio de ordenamiento (o de comparacin): EL criterio que utilizamos para asignar valores a
los registros con base en una o ms claves. De esta manera decidimos si un registro es mayor o
menor que otro.
Registro: Un grupo de datos que forman la lista. Pueden ser datos atmicos (enteros, caracteres,
reales, etc.) o grupos de ellos.
Cuando se estudian algoritmos de todo tipo, no slo de ordenamiento, es bueno tener una forma
de evaluarlos antes de pasarlos a cdigo, que se base en aspectos independientes de la
plataforma o el lenguaje. De esta manera podremos decidir cul se adapta mejor a los
requerimientos de nuestro programa. Algunos de estos aspectos son:
- 27 -
stos y otros no. Veamos un ejemplo. Si tenemos la siguiente lista de datos (nombre,
edad): "Pedro 19, Juan 23, Felipe 15, Marcela 20, Juan 18, Marcela 17", y la ordenamos
alfabticamente por el nombre con un algoritmo estable quedara as: "Felipe 15, Marcela
20, Marcela 17, Juan 23, Juan 18, Pedro 19". Un algoritmo no estable podra dejar a
Juan 18 antes de Juan 23, o a Marcela 20 despus de Marcela 17.
Tiempo de ejecucin: Este parmetro mide la complejidad del algoritmo, que no tiene que
ver con dificultad, sino con rendimiento. Es una funcin independiente de la
implementacin.
Una medida de eficiencia es:
Contar el nmero de comparaciones
Contar el nmero de movimientos de tems
Estos estn en funcin del nmero de elementos a ser ordenados.
En el ordenamiento una operacin fundamental es la de comparar. Ahora contamos
cuntas veces el algoritmo necesita comparar. Si en una lista de n trminos realiza n
comparaciones la complejidad es O(n). (En realidad es un poco ms complicado que eso).
Algunos ejemplos de complejidades comunes son:
O(1): Complejidad constante.
O(n2): Complejidad cuadrtica.
O(n log(n)): Complejidad logartmica.
Ahora podemos decir que un algoritmo de complejidad O(n) es ms rpido que uno de
complejidad O(n2). Otro aspecto a considerar es la diferencia entre el peor y el mejor caso.
Cada algoritmo se comporta de modo diferente de acuerdo a cmo se le entregue la
informacin; por eso es conveniente estudiar su comportamiento en casos extremos, como
cuando los datos estn prcticamente ordenados o muy desordenados.
Hay ms aspectos que se pueden tener en cuenta para realizar un anlisis de calidad sobre un
algoritmo de ordenamiento en particular, pero slo vamos a mencionar en esta materia los hasta
aqu descriptos.
Por ltimo estableceremos algunas convenciones sobre el pseudocdigo:
Vamos a ordenar la lista en forma ascendiente, es decir, de menor a mayor. Obviamente es
esencialmente lo mismo que hacerlo en forma inversa.
La forma de intercambiar los elementos depende de la estructura de datos: si es un arreglo
(dinmico o esttico) es necesario guardar una copia del primer elemento, asignarle el segundo al
primero y el temporal al segundo. La variable temporal es necesaria, porque de lo contrario se
perdera uno de los elementos. Si la estructura es una lista dinmica el procedimiento es parecido,
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 28 -
Ordenamiento Burbuja
O(n2)
Estable
O(n2)
No Estable No
O(n2)
Estable
No
No
- 29 -
El ordenamiento es una labor comn que realizamos cotidianamente, es un proceso tan comn en
nuestras vidas que no nos detenemos a meditar mucho en ello. Ordenar es meramente colocar
informacin de una manera especial basndonos en un criterio de ordenamiento.
El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una
secuencia tal que represente un orden, el cual puede ser numrico, alfabtico o incluso
alfanumrico, ascendente o descendente.
Tipos de ordenamientos
a- internos
Los datos a ordenar estn en memoria la principal Ram, por lo que se asume que el tiempo que se
requiere para acceder cualquier elemento sea el mismo. En el siguiente cuadro aparecen mtodos
que explcitamente pide desarrollar el programa y otros que no se trabajan en la materia, como
para presentar un panorama amplio del ordenamiento
Insercin Directa
Insercin Directa
Insercin Binaria
Seleccin Directa
Seleccin Directa
Burbuja
Intercambio Directo
Shake
Insercin Disminucin Incremental Shell
Heap
Ordenamiento De rbol
Tournament
Sort Particionado
Quick Sort
Merge Sort
Radix Sort
Clculo De Direccin
b- externos
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 30 -
Los datos a ordenar estn en la memoria secundaria, es decir, por ejemplo disco duro, disco
extrable, por lo que se asume que el tiempo que se requiere para acceder a cualquier elemento
depende de la ltima posicin consultada.
Straight Merging
Natural Merging
Balanced Multiway Merging
Polyphase Sort
Distribution Of Initial Runs
Shell
Insercin Binaria
Hashing
Burbuja
Algoritmos de intercambio:
Shake
QuickSort
Algoritmos de seleccin:
Seleccin Directa
Merge
- 31 -
Intercambio
Seleccin
Insercin
90
23
El mtodo busca el ms pequeo, y lo intercambia con el elemento que ocupa la primera posicin
2 45
120
36
89
90
23
Luego busca el nmero ms pequeo entre los que quedan menos el primer elemento que ya est
ubicado.
2
23
120 36
89 90
45
23
36
120
89
90
45
23
36
45
89
90
120
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 32 -
23
36
45
89
90
120
23
36
45
89
90
120
23
36
45
89
90
120
fin-desde
escribir (el vector ordenado es: )
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 33 -
Si se quisiese ordenar en forma decreciente los elementos, slo habra que dar vuelta el signo de
la desigualdad:
si vec [i ] < vec [ j ] entonces
La parte del intercambio corresponde al siguiente trozo de cdigo:
aux vec [ i ]
vec [i ] vec [ j ]
vec [j ] aux
EJEMPLO PRACTICO
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 34 -
Explicaremos el mtodo sobre una lista de nmeros enteros desordenados, por ejemplo:
67 90
30
21
51
30
21
51
Paso 2: toma el 3 elemento y lo inserta ordenado en la parte que ya est ordenada, previo
desplazar los elementos ordenados en forma lineal, para lo cual el elemento a insertar se guarda
en una variable auxiliar, lo cual permite hacer el desplazamiento de los elementos ordenados de la
lista:
67
90
30
21
51
67
90
90
21
51
67
67
90
21
51
aux= 30
Paso 3: toma el 4 elemento y busca insertarlo en la parte ordenada del vector. Para ello guarda el
valor a insertar en una variable auxiliar, y luego entra a desplazar los elementos ordenados
buscando el lugar adecuado para la insercin.
30
67
90
21
51
Aux = 21
30
67
90
90
51
21
67
67
90
51
30
30
67
90
51
21
30
67
90
51
Paso 4: toma el 5 elemento y busca insertarlo en la parte ordenada del vector. Para ello guarda el
valor a insertar en una variable auxiliar, y luego entra a desplazar los elementos ordenados
buscando el lugar adecuado para la insercin.
21
30
67
90
51
Aux = 4
21
30
67
90
90
51
21
30
67
67
90
51
21
30
30
67
90
51
21
21
30
67
90
51
21
30
67
90
51
Paso 5: toma el 5 elemento y busca insertarlo en la parte ordenada del vector. Para ello guarda el
valor a insertar en una variable auxiliar, y luego entra a desplazar los elementos ordenados
buscando el lugar adecuado para la insercin.
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 35 -
21
30
67
90
51
Aux = 51
4
21
30
67
90
90
21
30
67
67
90
21
30
51
67
90
algoritmo orden_insercin-directa
//declaraciones
inicio
- 36 -
fin-mientras
X [k +1] aux
fin-desde
fin
Existe una forma de mejorar el algoritmo de insercin lineal o directa. Para ello se utiliza el mtodo
de buscada binaria para ubicar la posicin correcta y no realizar un desplazamiento lineal.
En pseudocdigo el algoritmo de insercin mejorada es:
algoritmo orden_insercin_binaria
//declaraciones
inicio
- 37 -
algoritmo Mtodo_Burbuja
//declaraciones
inicio
// lectura del vector
desde i 1 hasta N hacer
leer ( vec[ i ] )
fin-desde
//ordenamiento del vector
desde i 1 hasta n-1 hacer
desde j 1 hasta n-1 hacer
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 38 -
- 39 -
aux vec [ j ]
vec [ j] vec [ j +1 ]
vec [ i+1 ] aux
fin-si
fin-desde
fin-desde
// mostrar por pantalla el arreglo ordenado
desde i 1 hasta N hacer
mostrar ( vec[ i ] )
fin-desde
fin
- 40 -
aux vec [ i ]
vec [i ] vec [ j ]
vec [j ] aux
fin-si
fin-desde
fin-desde
escribir (el vector ordenado es: )
desde i 1 hasta 10 hacer
mostrar ( vec [ i ])
fin-desde
fin
- 41 -
vec [i ] vec [ j ]
vec [j ] aux
fin-si
fin-desde
fin-desde
escribir (el vector ordenado es: )
desde i 1 hasta 10 hacer
mostrar ( vec [ i ])
fin-desde
fin
algoritmo Mtodo_Busqueda_secuencial
//declaraciones
inicio
// lectura del vector
desde i 1 hasta N hacer
leer ( vec[ i ] )
Materia: Programacin Lgica
Profesor: Ing. Silvia Carrera
- 42 -
fin-desde
//se toma la clave de bsqueda
leer ( clave)
//bsqueda
ban falso
desde i 1 hasta n hacer
si vec [i ] = clave entonces
ban verdadero
fin-si
fin-desde
si ban = verdadero entonces
mostrar ( la clave de bsqueda est en el arreglo )
si-no
mostrar ( la clave de bsqueda NO est en el arreglo )
fin-si
fin
- 43 -
Algoritmo bsqueda_binaria
// declaraciones
inicio
// llenar el arreglo x con N valores
// ordenar el arreglo
leer ( K) // clave de bsqueda
// se inicializan las variables para la bsqueda
bajo 1
alto N // N es el nmero de elementos del arreglo
central ent ( ( bajo + alto ) / 2)
mientras ( bajo < = alto ) y ( x [ central ] <> K) hacer
si K < x [ central] entonces
alto central -1
si-no
bajo central + 1
fin-si
central ent (( bajo +alto ) / 2)
fin-mientras
si K = x [central] entonces
escribir ( valor encontrado)
si-no
escribir ( valor no encontrar)
fin-si
fin
Bibliografa Obligatoria:
- 44 -
- 45 -