Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Departamento de informática
Campus de Segovia
Estructura de datos
Tema 4: Ordenación
• Conceptos básicos
• Elección de un método
• Métodos directos
• Métodos indirectos
CONCEPTOS BÁSICOS
• Ordenación de datos: operación consistente
en disponer una estructura de datos en una
colocación con respecto a uno de los campos
de elementos de un conjunto.
• Clave: Elemento por el que está ordenado un
conjunto de datos.
• Tipos de ordenación:
a) Según el orden:
Ascendentes: i < j ⇒ K [i] < = K [j]
Descendentes: i > j ⇒ K [i] > = K [j]
b) Según la cantidad de datos:
Directos: burbuja, selección, inserción
Indirectos (avanzados): rápida, mezcla
c) Según el lugar donde se almacenen los
datos:
interna: Si los datos están almacenados
en un array, una lista enlazada o un árbol.
(Memoria interna)
externa: Si los datos están almacenados
en un archivo. (Memoria secundaria).
ELECCIÓN DE UN MÉTODO
• Criterios:
a) El de menor tiempo de ejecución.
b) El de menor número de instrucciones.
• Ej:
MÉTODOS DIRECTOS
ORDENACIÓN POR BURBUJA:
Pasada 1: i = 1
MÉTODOS DIRECTOS
ORDENACIÓN POR BURBUJA:
• Pasos:
1. Encontrar el elemento mayor/menor de la
lista.
2. Intercambiar el elemento mayor con el
elemento de subíndice n (o bien si es el
elemento menor con el subíndice 1).
3. A continuación se busca el mayor en la
sublista de índices 1..n-1, y se intercambia con
el elemento subíndice n-1.
4. A continuación se busca el elemento mayor
de la sublista 1..n-2, y así sucesivamente.
MÉTODOS DIRECTOS
ORDENACIÓN POR SELECCIÓN: Ej
MÉTODOS DIRECTOS
ORDENACIÓN POR SELECCIÓN: Ej
• Algoritmo (pseudocódigo)
desde i ← n hasta 2 hacer
• Encontrar el elemento mayor del array 1..i
• Si el elemento mayor no está en el subíndice i,
entonces intercambiar elemento mayor con el de
subíndice j.
MÉTODOS DIRECTOS
ORDENACIÓN POR SELECCIÓN:
• Procedimiento:
function Mayor (ultimo: integer;A: Lista): integer;
var max, j: integer;
begin
max := 1;
for j:= 2 to ultimo do
if A[j] > A[max] then max := j;
Mayor := max
end;
procedure seleccion (var A: Lista; n: integer);
var i, j, aux: integer;
begin
for i:= n downto 2 do
begin
j := Mayor (i, A);
aux:= A [j];
A[j] := A[i];
A[i] := aux
end
end;
MÉTODOS DIRECTOS
ORDENACIÓN POR INSERCIÓN:
• Ej:
MÉTODOS DIRECTOS
ORDENACIÓN POR INSERCIÓN: Ej
MÉTODOS DIRECTOS
ORDENACIÓN POR INSERCIÓN: Ej
• Pasos:
1. Elegir un elemento del array ⇒ Pivote.
2. Dividir el array original en dos mitades, de
modo que en cada una de ellas estén los
elementos menores y mayores que el pivote.
3. Cada mitad debe estar ordenada. Para ello, se
procede como en los pasos 1 y 2 ⇒ Recursividad.
4. El proceso parará cuando las mitades estén
formadas por un solo elemento (ya está ordenado)
Sublista izquierda
Sublista derecha
MÉTODOS INDIRECTOS
ORDENACIÓN RÁPIDA: (QUICKSORT)
7. La ordenación de las sublistas implica el
mismo proceso que antes, excepto que varían
los índices.
Sublista izquierda: (1, 5)
• Pasos:
1. Dividir la lista en dos mitades.
2. Ordenar la sublista izquierda.
3. Ordenar la sublista derecha.
4. Mezclar las dos sublistas juntas.
MÉTODOS INDIRECTOS
ORDENACIÓN POR MEZCLA: (MERGESORT)
MÉTODOS INDIRECTOS
ORDENACIÓN POR MEZCLA: (MERGESORT)
procedure mezcla (var A: Lista; primero, ultimo: integer);
var central: integer;
procedure une (var L: Lista, izq, dcha, ptocent: integer);
var Aux: Lista; x, y,z: integer;
begin {une}
x := izq; y := ptocent; z := x
while (x < = ptocent) and (y <=dcha) do
{bucle para mezclar las sublistas}
begin
if L[x]<=L[y] then
begin
Aux [z] := L[x]; x:= x +1
end
else begin
Aux [z] := L[y];
y:= y +1
end;
z:=z+1
end; {while}
{bucles para copiar elementos restantes si existen}
while x <= ptocent do
begin
Aux [z]:= L[x]; x:=x+1;z:=z+1
end; (Sigue...)
MÉTODOS INDIRECTOS
ORDENACIÓN POR MEZCLA: (MERGESORT)
while y <= dcha do
begin
Aux [z]:= L[y];
y:= y+1;
z:= z+1
end;
{copiar aux en la lista}
for x:= izq to dcha do L[x] := Aux[x]
end; {une}
begin {mezcla}
if primero < ultimo then
central := (primero + ultimo) div 2;
mezcla (A, primero, central);
mezcla (A, central+1, ultimo);
une (A, primero, ultimo, central)
end;
COMPARACIÓN DE
MÉTODOS INDIRECTOS