1Diego Gutiérrez
23. Ordenación de vectores (tablas)
3Diego Gutiérrez
Ordenación
O cómo evitar tener que buscar una aguja en un pajar
4Diego Gutiérrez
Ordenación
O cómo evitar tener que buscar una aguja en un pajar
¿Cómo buscamos una palabra en un diccionario? ¿O un número de teléfono en una guía?
Usando nuestro conocimiento de cómo están ordenados los datos
5Diego Gutiérrez
Ordenación
O cómo evitar tener que buscar una aguja en un pajar
¿Cómo buscamos una palabra en un diccionario? ¿O un número de teléfono en una guía?
Usando nuestro conocimiento de cómo están ordenados los datos
Sin un orden lógico en los datos, las búsquedas podrían ser terriblemente largas
Agilizar las operaciones de búsqueda es una razón que justifica la importancia de contar con estructuras de datos ordenadas.
6Diego Gutiérrez
Ordenación
Ordenar: organizar los datos según un criterio
La comparación (aplicación del criterio) de dos elementos cualesquiera del conjunto a ordenar debe resultar en un valor lógico que indique si los elementos cumplen el criterio de ordenación
Aunque todos sabemos ordenar un número pequeño de elementos (por orden alfabético, por numeración creciente o decreciente…) la tarea se haría casi imposible para grandes cantidades de elementos. Entran en juego los algoritmos y los ordenadores
7Diego Gutiérrez
Ordenación
La importancia de contar con tablas de datos ordenadas se justifica por la eficiencia de los algoritmos de búsqueda binaria que pueden ser aplicados (esp. si n>100 aprox.)
Algunos de los algoritmos de ordenación más utilizados son inserción, intercambio (burbuja), selección, mezcla o quicksortLa elección de un determinado algoritmo depende de factores como el tamaño de la tabla, el tipo de datos, la forma de acceso a la información o la cantidad de memoria disponible.
8Diego Gutiérrez
Ordenación
El problema:
Entrada: secuencia ⟨a1, a2, …, an⟩ de elementosSalida: permutación ⟨a'1, a'2, …, a'n⟩ tal que a'1≤a'2≤…≤a'n
Suponemos definida una función medida que, aplicada a los datos de la tabla proporciona como resultados valores pertenecientes a un tipo escalar y, por lo tanto, comparables
Ejemplo:Entrada: 8 2 4 9 3 6Ordenación exigida: medida(a'1) <= medida(a‘2) <= ...<= medida(a‘n)
Salida: 2 3 4 6 8 9
secuencia de datos ordenadosde acuerdo con un determinado criterio de ordenación.
9Diego Gutiérrez
Para ilustrar estas ideas, vamos a considerar una tabla T con unnúmero reducido de datos, por ejemplo ocho datos :
10Diego Gutiérrez
Para ilustrar estas ideas, vamos a considerar una tabla T con unnúmero reducido de datos, por ejemplo ocho datos :
Se muestran a continuación ahora los valores de la medida de cada uno de los datos. Por simplicidad, se ha considerado en este ejemplo que los valores de medida son datos de tipo entero.
11Diego Gutiérrez
La ordenación de la tabla T debe conducir a una reorganización de sus datos que satisfaga que sus medidas respectivas estén ordenadas de forma no decreciente (“≤”). Tras la ordenación, el valor de la tabla T es el siguiente :
Se puede comprobar que los valores de las medidas de cada uno de ellos respeta el criterio de ordenación no decreciente (“≤”).
12Diego Gutiérrez
Ordenación
Tres algoritmos:SelecciónInserciónIntercambio directo (o burbuja)
No usan tablas auxiliares para la ordenación
Desde el punto de vista didáctico son excelentes ejemplos de diseño de algoritmos sobre estructuras de datos indexadas
Otros algoritmos más eficientes (quicksort, mergesort…) no se presentan ya que su complejidad sobrepasa el ámbito de este curso
13Diego Gutiérrez
Método de selección:
Su eficiencia destaca cuando se aplica a tablas de dimensión reducida.
El método se basa en una idea muy sencilla y fácil de programar. Se trata de iterar a lo largo de la tabla, buscando en cada iteración el elemento menor (es decir, el dato cuya medida es la menor) entre los que quedan por ordenar para situarlo en la posición que le corresponde.
http://www.youtube.com/watch?v=boOwArDShLU&feature=related
14Diego Gutiérrez
Método de selección
En la iteración i-ésima se parte de que la subtabla T(1..i-1) ya está ordenada (con los i-1 valores menores de la tabla). Se busca entonces el elemento siguiente en la ordenación dentro de la subtabla T(1..n) y se permuta con el elemento de la posición T(i)
46 21 8 22 11
http://www.youtube.com/watch?v=boOwArDShLU
15Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
46 21 8 22 11
16Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 21 46 22 11
17Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 21 46 22 11
18Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 21 46 22 11
19Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 46 22 21
20Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 46 22 21
21Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 46 22 21
22Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 21 22 46
23Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 21 22 46
24Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 21 22 46
25Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 21 22 46
26Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 21 22 46
27Diego Gutiérrez
Método de selección
Encontrar el siguiente elemento a ordenar y ponerlo en el lugar adecuado intercambiándolo con el elemento en la posición a ser ocupada
8 11 21 22 46
(El último elemento evidentemente ya está en su sitio)
28Diego Gutiérrez
Método de selecciónalgoritmo Seleccion (referencia a: tpTabla; valor n: integer);{ Pre: a=a0Post: La tabla a almacena una permutación de a0 y sus datos están ordenados}variables
i, j, pos_min: integer; {i: lugar, j: elemento, pos_min: posición del mínimo}min: tpElemento;
principiopara i:=1 hasta n-1 hacer
pos_min:=i; min:=a[pos_min] para j=i+1 hasta n hacer
si condición entonces {nueva posición, nuevo mínimo}pos_min:=j; min:= a[pos_min] fsi
fparasi pos_min <> i entonces {si i no era el menor, se intercambia}
a[pos_min]:=a[i];a[i] = min; fsi
fparafin
a[j] < a[pos_min]
29Diego Gutiérrez
Método de selecciónalgoritmo Seleccion (referencia a: tpTabla; valor n: integer);{ Pre: a=a0Post: La tabla a almacena una permutación de a0 y sus datos están ordenados}variables
i, j, pos_min: integer; {i: lugar, j: elemento, pos_min: posición del mínimo}min: tpElemento;
principiopara i:=1 hasta n-1 hacer
pos_min:=i; min:=a[pos_min] para j=i+1 hasta n hacer
si condición entonces {nueva posición, nuevo mínimo}pos_min:=j; min:= a[pos_min] fsi
fparasi pos_min <> i entonces {si i no era el menor, se intercambia}
a[pos_min]:=a[i];a[i] = min; fsi
fparafin
Podemos no evaluar esta condición… (coste)
30Diego Gutiérrez
Método de selección
Simple y fácil de implementar…No muy eficiente para grandes tablas
31Diego Gutiérrez
Método de inserción directa
Inserción directa
El método es algo menos eficiente que el de ordenación por selección, salvo si la tabla a ordenar presenta una secuencia cuyos datos están próximos a la deseada tras la ordenación
Se itera n-2 veces. En la iteración i se parte de la precondición de que la subtabla T(1..i-1) está ordenada según valores no decrecientes (<=) de la medida de sus datos. La acción a iterar consiste en la inserción del dato T(i) en la posición que le corresponda de la subtabla T(1..i).
En cada iteración crece en una unidad el número de datos ya ordenados.
32Diego Gutiérrez
Método de inserción directa
Inserción directa:
El método es similar a ordenar por orden creciente una serie de cartas en la mesa: se examina la que se tiene en la mano, se analizan las ya ordenadas hasta encontrar el lugar correspondiente, se hace hueco y se inserta la carta.
http://www.youtube.com/watch?v=gTxFxgvZmQs
Para tener i cartas ordenadas, se parte de i-1 cartas ordenadas e inserta la nueva carta en el lugar correspondiente
O sea, se insertan elementos en una parte que ya está ordenada
33Diego Gutiérrez
Método de inserción directa
Inserción directa: Esquema básico
Se recorre la tabla con un bucle (índice i) desde el segundo elemento hasta el final, de forma que se van dejando ordenadas todas las posiciones inferiores. “Se hace hueco”: El elemento que se quiere insertar se guarda en una variable auxiliar y se va recorriendo la parte ordenada desde el final hasta el principio y desplazando los elementos para dejar el hueco donde insertar.El elemento en cuestión (el de índice i) se inserta en el lugar que le corresponde dentro de la parte ordenada.
para i:=2 hasta n hacerinsertar ai en el lugar adecuado en la secuencia a1….ai-1
fpara
34Diego Gutiérrez
Método de inserción directa
Elemento a buscarElementos
ordenados
ij
35Diego Gutiérrez
Método de inserción directa
Inserción directa
36Diego Gutiérrez
Método de inserción directa
Inserción directa
37Diego Gutiérrez
Método de inserción directa
Inserción directa
38Diego Gutiérrez
Método de inserción directa
Inserción directa
39Diego Gutiérrez
Método de inserción directa
Inserción directa
40Diego Gutiérrez
Método de inserción directa
Inserción directa
41Diego Gutiérrez
Método de inserción directa
Inserción directa
42Diego Gutiérrez
Método de inserción directa
Inserción directa
43Diego Gutiérrez
Método de inserción directa
Inserción directa
44Diego Gutiérrez
Método de inserción directa
Inserción directa
45Diego Gutiérrez
Método de inserción directa
Inserción directa
fin
Ver también http://www.wanginator.de/studium/applets/insertionsort_de.html
46Diego Gutiérrez
Método de inserción directa
Algoritmo detallado
algoritmo Insercion_Directa (referencia a: tpTabla; valor n: integer);{Pre: a = a0; Post: a es una permutación de a0 cuyos elementos están ordenados}variables
i, j: integer;{i: elemento a insertar, j: punto de inserción}aux: tpDato;
principiopara i:=2 hasta n hacer
aux:=a[i]; j:=i-1;mientras j>0 y a[j]>a[0] hacer {buscar punto inserción}
a[j+1] := a[j]; j := j-1
fmq;a[j+1] := aux; {insertar a[i] en su posición correcta}
fparafin
47Diego Gutiérrez
Método de inserción directa
Elemento a buscarElementos
ordenados
ij
Más rápido, también fácil de implementar
48Diego Gutiérrez
Método de la burbuja (o intercambio)
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
26 14 26 15 1 3
http://www.youtube.com/watch?v=1JvYAXT_064&mode=related&search
49Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
26 14 26 15 1 3
50Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 26 15 1 3
51Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 26 15 1 3
52Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 26 15 1 3
53Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 15 26 1 3
54Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 15 26 1 3
55Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 15 1 26 3
56Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 15 1 26 3
57Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 15 1 3 26
58Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 15 1 3 26
59Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 26 15 1 3 26
60Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 15 26 1 3 26
61Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 15 26 1 3 26
62Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 15 1 26 3 26
63Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 15 1 26 3 26
Si en la última iteración realizada los últimos elementos intercambiados son los de las posiciones j y j+1, la siguiente sólo necesitará comparar hasta el j-1, j (a partir de ahí ya estáordenada)
64Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 15 1 3 26 26
65Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 15 1 3 26 26
66Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 15 1 3 26 26
67Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 1 15 3 26 26
68Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 1 15 3 26 26
69Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 1 3 15 26 26
70Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
14 1 3 15 26 26
71Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
1 14 3 15 26 26
72Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
1 14 3 15 26 26
73Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
1 3 14 15 26 26
74Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
1 3 14 15 26 26
75Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
1 3 14 15 26 26
76Diego Gutiérrez
Método de la burbuja
Se recorre la tabla comparando la medida de dos elementos consecutivos, intercambiándolos si es necesario. El proceso se repite hasta que no se haga ningún intercambio (tabla ordenada)A diferencia de los algoritmos de selección e inserción directa, los elementos sólo se mueven una posición cada vez
1 3 14 15 26 26
77Diego Gutiérrez
Método de la burbuja
Ineficiente
78Diego Gutiérrez
Método de la burbuja
Algoritmo:
algoritmo Burbuja (referencia a: tpTabla; valor n: integer);variables
j: integer; {índice}aux: tpDato;ult_comp, ult_int: integer; {índices de la última pareja a comparar e intercambiada}
principioult_comp = (n-1) {comparo todos hasta el penúltimo} mientras que ult_comp>=1 hacer
ult_int = 1; {terminará si no hay más intercambios} para j=1 hasta ult_comp hacer
si condición_intercambio entonces aux:=a[j]; a[j]:=a[j+1]; a[j+1]:=aux;ult_int:=j; fsi fpara
ult_comp:=ult_int-1; fmqFin
a[j] > a[j+1]
79Diego Gutiérrez
Método de la burbuja
Algoritmo:
algoritmo Burbuja (referencia a: tpTabla; valor n: integer);variables
j: integer; {índice}aux: tpDato;ult_comp, ult_int: integer; {índices de la última pareja a comparar e intercambiada}
principioult_comp = (n-1) {comparo todos hasta el penúltimo} mientras que ult_comp>=0 hacer
ult_int = 1; {terminará si no hay más intercambios} para j=1 hasta ult_comp hacer
si condición_intercambio entonces aux:=a[j]; a[j]:=a[j+1]; a[j+1]:=aux;ult_int:=j; fsi fpara
ult_comp:=ult_int-1; fmqFin
80Diego Gutiérrez
Conclusiones: