Sei sulla pagina 1di 50

Mtodos

d de d ordenacin
d i interna
i

Eva Lucrecia Gibaja Galindo


D t Informtica
Dpto. I f ti y Anlisis
A li i Numrico
N i
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Introduccin
Ordenar: Proceso de reorganizar un conjunto dado,
de objetos similares, en una secuencia especificada.
Objetivo fundamental: Facilitar la bsqueda de
cualquier elemento de dicho conjunto (es mucho ms
fcil
c een uun co
conjunto
ju o oordenado).
de ado).
Las tcnicas de ordenacin son un ejemplo muy
ilustrativo sobre las ideas implicadas en el anlisis de
rendimiento de algoritmos que permitan la eleccin
adecuada de los mismos.
mismos
2
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Introduccin
Definicin formal del problema:
Se toman n elementos R1, R2, R3, ..., Rn, para ordenarlos.
Cada Rn se denomina registro y al conjunto de los n registros, fichero.
Cada registro Ri, tiene una clave Ki, que determina el orden.
orden
El registro puede contener informacin adicional que no tiene ningn efecto
en el proceso de ordenacin y permanece en el registro.
Se especifica entre las claves una relacin de orden <,< de forma que,
que para
tres valores a, b, c se cumplen las siguientes condiciones:
1. una de las posibilidades a<b, a=b, b<a es cierta.
2
2. si a<b y b<c entonces a<c (propiedad transitiva)
transitiva).
Ordenacin: Determinar una permutacin p1, p2,..., pn de los registros que
coloque las claves en orden no decreciente.
K(p1) K(p2) (p3) .... K(pn)

3
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Introduccin
Ordenacin estable: Los registros con igual clave, mantienen su orden relativo
inicial.
Tipos de ordenacin en funcin de la memoria:
Ordenacin interna (vectores). Se almacenan en memoria. Ms rpidos.
Ordenacin externa (ficheros). Se ubican en dispositivos de almacenamiento externo.
Ms lentos.
Ordenacin in situ. Las permutaciones de los elementos a ordenar se realizan
utilizando el espacio ocupado por estos.
Tiempo de ordenacin:
Comparaciones (funcin del nmero de elementos a ordenar, n).
Desplazamientos (funcin del nmero de elementos a ordenar, n).
Mtodos de orden n2 (mtodos directos)
1. Son una introduccin a la problemtica y su estudio es til.
2. Los programas para estos mtodos son ms cortos y fciles de entender.
3. Son ms rpidos cuando el nmero de elementos es suficientemente pequeo.
No deben usarse para nmeros grandes de elementos.
4
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por insercin


Insercin directa
Supongamos que j<in y que se han ordenado ya los
ii-11 elementos ya tratados.
Se compara el nuevo elemento, vi con vi-1, vi-2, ..., uno
a uno,
uno hasta encontrar dos elementos consecutivos vj
y vj+1 entre los cuales insertar el elemento vi.
Se despla
desplazan
an unn espacio los elementos vj+1, vj+2,...,vj-1,
y se coloca el nuevo elemento en la posicin j+1.

5
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por insercin


V[1] V[2] ... V[i 1] V[i]
V[i-1] ... V[ ]
V[n]

ordenados

V[1] V[2] ... V[j] V[j+1] ... V[i-1] V[i] ... V[n]
V[j]<=V[i]<V[j+1]

6
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por insercin


algoritmo insercin_directa (n; v; )
inicio
para i de 2 a n hacer
auxiliar v[i] //Elemento que hay que insertar
j i 1 //Tope
// d los
de l ordenados
d d
mientras j>0 Y v[j]>auxiliar
[j ] v[j]
v[j+1] [j] //Desplaza
p
jj-1
fin-mientras
v[j+1] auxiliar
fin-para
Ojo!! En este tema los vectores
fin
comienzan
i en la
l posicin
i i 1

7
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67

Ejemplo insercin directa


i=2 44 55 12 42 94 18 6 67

ii=33 44 55 12 42 94 18 6 67 auxiliar=12
auxiliar 12
44 55 55 42 94 18 6 67 j=2
44 44 55 42 94 18 6 67 j=1
12 44 55 42 94 18 6 67 jj=0

i=4 12 44 55 42 94 18 6 67 auxiliar=42
12 44 55 55 94 18 6 67 j=3
12 44 44 55 94 18 6 67 j=2
12 42 44 55 94 18 6 67 j=1 V[j]<42
8
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ejemplo insercin directa auxiliar=94


i=5 12 42 44 55 94 18 6 67 V[j]<94

i=6 12 42 44 55 94 18 6 67 auxiliar=18

12 42 44 55 94 94 6 67 j=5

12 42 44 55 55 94 6 67 j=4

12 42 44 44 55 94 6 67 j=3

12 42 42 44 55 94 6 67 j=2

12 18 42 44 55 94 6 67 jj=1

9
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ejemplo insercin directa


i=7 12 18 42 44 55 94 6 67 auxiliar=6
12 18 42 44 55 94 94 67 j=6
12 18 42 44 55 55 94 67 j=5
12 18 42 44 44 55 94 67 jj=4
12 18 42 42 44 55 94 67 j=3
12 18 18 42 44 55 94 67 jj=2
12 12 18 42 44 55 94 67 j=1
6 12 18 42 44 55 94 67

i=8 6 12 18 42 44 55 94 67 auxiliar=67
6 12 18 42 44 55 94 94 j=7
6 12 18 42 44 55 67 94 j=6 V[j]<67 10
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por insercin


algoritmo insercin_binaria (n; v; )
inicio
para i de 2 a n hacer
p ce
auxiliar v[i] //Elemento a insertar
izquierda 1 // Posicion de insercion
derecha i 1 //Parte del vector parcialmente ordenada
mientras izquierda <=< derecha
e
mitad (izquierda+derecha) div 2
si auxiliar < v[mitad] entonces I D
derecha mitad - 1
sino
i
izquierda mitad + 1 I M D e
fin-si I D
fin-mientras
para j de i-1 a izquierda paso -1
v[j+1] v[j]
fin-para
v[izquierda] auxiliar //izquierda indica la posicin donde debe ir el elemento
fin-para
fin
11
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67

Ejemplo insercin binaria


i=2 44 55 12 42 94 18 6 67

44m 55 12 42 94 18 6 67

i=3 44m 55 12 42 94 18 6 67

44m 55 12 42 94 18 6 67

44 55 55 42 94 18 6 67 j=2
j 2
44 44 55 42 94 18 6 67 j=1
12 44 55 42 94 18 6 67 v[izd]=12
12
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67

Ejemplo insercin binaria


i=4 12 44m 55 42 94 18 6 67

12 44m 55 42 94 18 6 67

12m 44 55 42 94 18 6 67

12 44 55 55 94 18 6 67 j=3
12 44 44 55 94 18 6 67 j=2
12 42 44 55 94 18 6 67 v[izd]=42

13
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67
Ejemplo insercin binaria
i=7 12 18 42m 44 55 94 6 67

12m 18 42 44 55 94 6 67

12m 18 42 44 55 94 6 67
12 18 42 44 55 94 94 67 j=6
12 18 42 44 55 55 94 67 j 5
j=5
12 18 42 44 44 94 94 67 j=4
12 18 42 42 55 94 94 67 j=3
12 18 18 42 55 94 94 67 j=2
12 12 18 42 55 94 94 67 j=1
6 12 18 42 55 94 94 67 v[izd]=6 14
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67
Ejemplo insercin binaria
i=8 6 12 18 42m 44 55 94 67

6 12 18 42m 44 55 94 67

6 12 18 42 44 55m 94 67

6 12 18 42 44 55 94m 67

6 12 18 42 44 55 94 94 j=7

6 12 18 42 44 55 67 94 v[izd]=67

15
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por insercin


algoritmo insercin_shell(n; v; )
inicio
di i n
distancia
repetir
distancia distancia div 2
repetir
ordenado verdad
i1
repetir
si v[i] > v[i+distancia] entonces
auxiliar v[i]
v[i] v[i+distancia]
v[i+distancia] auxiliar
ordenado falso
fin-si
ii+1
hasta que i+d > n
hasta que ordenado
hasta distancia=1
fin

16
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por insercin


Insercin shell
La secuencia de incrementos tomada (las sucesivas
mitades), no tiene por qu ser nica:
Se puede usar cualquier secuencia con tal de que el
incremento final sea 1.
En particular no se sabe qu secuencia de incrementos
produce el mejor resultado.
Knuth recomienda:
1, 4, 13, 40, 121, ... donde hk-1=3hk+1, ht=1, t=E(log3n)-1
1, 3, 5, 7, 15, 31,... donde hk-1=2hk+1, ht=1, t=E(log2n)-1
17
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

5 4 6 8 9 5 7 3 3

Ejemplo insercin Shell


d=4 5 4 6 8 9 5 7 3 3

5 4 6 3 3 5 7 8 9

3 4 6 3 5 5 7 8 9

Ordenados los pares de distancia 4

18
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

5 4 6 8 9 5 7 3 3

Ejemplo insercin Shell


d=2
3 4 6 3 5 5 7 8 9

3 3 5 4 6 5 7 8 9

3 3 5 4 6 5 7 8 9

Ordenados los pares de distancia 2

19
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

5 4 6 8 9 5 7 3 3

Ejemplo insercin Shell


d=1
3 3 5 4 6 5 7 8 9

3 3 4 5 5 6 7 8 9

Ordenados los pares de distancia 1

20
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por seleccin


La idea de este tipo de mtodos se basa en las
siguientes operaciones:
1. Seleccionar el elemento ms pequeo.
2. Intercambiarlo con el primero, v1.
3. A continuacin se repiten estas operaciones con los n-1,
n 2 ..., elementos restantes,
n-2, restantes hasta que quede un nico
elemento, el mayor.
Los mtodos basados en esta idea requieren la
disponibilidad de todos los elementos antes de
empezar
p el proceso
p de ordenacin.
Esencialmente la idea es opuesta a la de insercin.
21
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por seleccin


algoritmo seleccin-directa(n; v; )
i i i
inicio
para i de 1 a n-1
menor i
para k de i+1 a n
si v[k] < v[menor] entonces
menor k
fin-si
fin-para
auxiliar v[menor]
v[menor] v[i] intercambio
[ ] auxiliar
v[i]
fin-para
fin 22
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67
Ejemplo Seleccin
i=1 44 55 12 42 94 18 6 67

i=2 6 55 12 42 94 18 44 67

ii=33 6 12 55 42 94 18 44 67

i=4 6 12 18 42 94 55 44 67

i=5 6 12 18 42 94 55 44 67

i 6
i=6 6 12 18 42 44 55 94 67

i=7 6 12 18 42 44 55 94 67

6 12 18 42 44 55 67 94
23
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

3
5
Ordenacin por intercambio 7
Intercambio directo o mtodo de la burbuja 9
La base de este mtodo es la comparacin e intercambio de
pares de elementos adyacentes, hasta que todos los elementos
del vector estn ordenados
ordenados.
Para ello, se realizan varias pasadas sobre el vector, moviendo
en cada una de ellas el elemento mnimo,, hasta el extremo
izquierdo del vector.
Si se observase el vector como si estuviera en posicin vertical
en vez de
d horizontal,
h i t l los l elementos
l t se asemejanj a burbujas
b b j en
un depsito de agua, con pesos acordes al valor de los
mismos;; de cada pasada
p sobre el vector resulta la ascensin a
una burbuja hasta el nivel del peso que le corresponde.
24
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por intercambio


algoritmo burbuja(n; v; )
i i i
inicio
para i de 2 a n
para j de n a i inc -1
si v[j-1] > v[j] entonces
auxiliar v[j-1]
v[j 1] v[j]
v[j-1] intercambio
v[j] auxiliar
fin-si
fin-para
fin-para
fin

25
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67

Ejemplo burbuja
i=2 44 55 12 42 94 18 6 67 j=8

44 55 12 42 94 18 6 67 j=7

44 55 12 42 94 6 18 67 j=6

44 55 12 42 6 94 18 67 j=5

44 55 12 6 42 94 18 67 j=4

44 55 6 12 42 94 18 67 j=3

44 6 55 12 42 94 18 67 jj=2

6 44 55 12 42 94 18 67
26
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ejemplo burbuja
i=3 6 44 55 12 42 94 18 67 j=8

6 44 55 12 42 94 18 67 j=7

6 44 55 12 42 18 94 67 j 6
j=6

6 44 55 12 18 42 94 67 jj=5

6 44 55 12 18 42 94 67 j=4

6 44 12 55 18 42 94 67 j=3

6 12 44 55 18 42 94 67

27
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ejemplo burbuja
i=4 6 12 44 55 18 42 94 67 j=8

6 12 44 55 18 42 67 94 j=7

6 12 44 55 18 42 67 94 j 6
j=6

6 12 44 55 18 42 67 94 jj=5

6 12 44 18 55 42 67 94 j=4

6 12 18 44 55 42 67 94

28
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ejemplo burbuja
ii=44 6 12 18 44 55 42 67 94

i=5 6 12 18 42 44 55 67 94
No se han
i=6 6 12 18 42 44 55 67 94 producido
cambios
bi
i=7 6 12 18 42 44 55 67 94

i=8 6 12 18 42 44 55 67 94

29
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por intercambio


Mejoras al algoritmo de la burbuja:
1. Las tres ltimas pasadas no tienen efecto, por estar ya
estos ordenados.
Controlar que termine la ordenacin al realizar una ltima
pasada sin intercambios.
2. Una burbuja mal situada en el extremo pesado del vector
se sita en la posicin correcta en una sola pasada. Un
elemento mal colocado en el extremo ligero del vector, se
hunde hacia su posicin correcta a un ritmo de una
posicin por pasada.
Esto sugiere la alternancia en la direccin de dos pasadas
consecutivas.
ti

30
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por intercambio


3. Todos los pares de elementos adyacentes por debajo de la
posicin del ltimo intercambio realizado estn ya ordenados.
Las pasadas siguientes pueden terminarse en esta posicin, sin tener
que llegar al lmite inferior,
inferior i.
i

2 5 7 18 105 94 42 12
i=2 2 5 7 18 105 94 12 42 j=8

2 5 7 18 105 12 94 42 j=7

2 5 7 18 12 105 94 42 j=6

2 5 7 12 18 105 94 42 j=5
31
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin por intercambio


algoritmo sacudida(n; v; )
inicio
izquierda 2
derecha n
k n //Posicin del ltimo intercambio
repetir
para j de derecha a izquierda paso 1
si v[j-1] > v[j] entonces
auxiliar v[j-1] //Intercambio
v[j-1] v[j]
v[j] auxiliar
k j //Actualiza posicin del ltimo cambio
fin-si
fin-para
izquierda k+1
para j de izquierda a derecha
si v[j-1] > v[j] entonces
auxiliar v[j-1]
[j ] //Intercambio
v[j-1] v[j]
v[j] auxiliar
k j //Actualiza posicin del ltimo cambio
fin-si
fin-para
fin para
derecha k-1
hasta que izquierda > derecha
fin
32
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67

Ejemplo sacudida
6 44k 55 12 42 94 18 67

6 44 12 55k 42 94 18 67

6 44 12 42 55k 94 18 67

6 44 12 42 55 94k 18 67

6 44 12 42 55 18 94k 67

6 44 12 42 55 18 67 94k

34
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ejemplo sacudida
6 44 12 42 55 18 67 94

6 44 12 42 18 55k 67 94

6 44 12 18 42k 55 67 94

6 12 44k 18 42 55 67 94

6 12 18 44k 42 55 67 94

6 12 18 42 44k 55 67 94

6 12 18 42 44 55 67 94
35
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Mtodos sofisticados
Ordenacin p por montculo ((heapsort).
p ) No lo
vamos a ver.
Ordenacin por mezcla (mergesort).
(mergesort) No lo
vamos a ver.
Ordenacin rpida (quicksort)

36
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Mtodos sofisticados
Ordenacin rpida (quicksort)
Se toma arbitrariamente un elemento (x) del vector:
1. Se recorre el vector de izquierda a derecha hasta encontrar un
elemento vi, que sea mayor que x.x
2. Se recorre el vector de derecha a izquierda hasta encontrar un
elemento vj que sea menor que x.
3. S iintercambian
Se t bi vi y vj, y se contina
ti este
t proceso hasta
h t que los
l
recorridos se encuentran.
Como resultado:
Tenemos el vector partido en dos, una parte izquierda con elementos
menores que x y la derecha con los mayores que x.
Tras aplicar el algoritmo de particin,
particin el elemento x ocupar su
posicin correcta.
37
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Mtodos sofisticados
Ordenacin rpida (quicksort)
Caso ms favorable: Se selecciona la mediana como elemento
de particin en todos los casos:
Cada proceso de particin divide al vector en dos partes iguales,
iguales y el
nmero de pasadas para ordenarlo es logn.
El total de comparaciones resultantes el del orden nlogn.
Evidentemente la posibilidad de que esto ocurra es prcticamente
nula. No obstante el rendimiento medio del algoritmo sigue siendo
proporcional a nlogn.
Caso ms desfavorable: Se selecciona como elemento de
particin el mayor del subvector analizado.
El principal
i i l inconveniente
i i t es su bajo
b j rendimiento
di i t para valores
l
pequeos de n.
38
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Mtodos sofisticados
algoritmo quicksort (izquierda, derecha, n; v;)
inicio
i izquierda
j derecha
mitad v[(izquierda + derecha) div 2]
repetir
mientras v[i] < mitad
ii+1
fi
fin-mientras
i t
mientras v[j] > mitad
jj-1
fin-mientras
si i <= j entonces Se intercambia el pivote y por
auxiliar v[i]
v[i] v[j] tanto i++, j++por lo que el pivote
v[j] auxiliar
ii+1 no se incluye en las llamadas
jj-1 recursivas
fin-si
hasta que i > j
si izquierda < j entonces
quicksort (izquierda, j, n, v) Si hay un solo elemento, para la recursividad
fin-si
si i < derecha entonces
quicksort (i, derecha, n, v)
fin-si
fin
39
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

44 55 12 42 94 18 6 67

Ejemplo quicksort
Quicksort(1, 8) 44 55 12 42m 94 18 6 67

6 55 12 42m 94 18 44 67

6 18 12 42m 94 55 44 67
Quicksort(1, 3) Quicksort(5, 8)
el pivote cambia, 6 18m 12 94 55m 44 67
se incluye en la 6 18m 12
llamada 44 55m 94 67
recursiva
6 12 18m
Quicksort(1, 2) Quicksort(7, 8) 94m 67
6m 12
67 94m
6 12 41
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

2 4 6 8 1 5 3

Ejemplo quicksort
Quicksort(1, 7) 2 4 6 8m 1 5 3
2 4 6 3 1 5 8m
Quicksort(1, 6) 2 4 6m 3 1 5
2 4 5 3 1 6m

2 4 5m 3 1 Quicksort(1, 5)

2 4 1 3 5m
2 4m 1 3 Quicksort(1, 4)

2 3 1 4m
42
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Mtodo
Mt d de
d contabilizacin
t bili i de d
frecuencias
Slo se puede aplicar bajo condiciones muy especiales.
NO es un mtodo in-situ (requiere un vector auxiliar para la
ordenacin).
Su importancia radica en que su tiempo de ejecucin es O(n).
Si el rango de los valores del vector de partida es muy amplio,
d fi i un vector que abarque
definir b dicho
di h rango es inviable.
i i bl
Este algoritmo se puede plantear en ms ocasiones de lo que a
priori
i i parece.

43
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Mtodos sofisticados
Mtodo de contabilizacin de frecuencias
Se basa en contabilizar frecuencias de los elementos del vector:
En un vector ordenado, si un elemento est en la posicin k-sima, se debe a
que en el estado inicial haba k-1 elementos menores que el (si suponemos
que todos los elementos son distintos).
Contar para cada elemento del vector v, el nmero de elementos inferiores a
el, despus colocar cada valor en un vector vordenado en funcin de la
contabilizacin
t bili i realizada.
li d
Para realizar la contabilizacin necesaria, hay que comparar cada elemento
del vector con los dems (n2).
Cuando el nmero de posibles elementos del vector es finito, y est acotado
entre unos lmites razonables, se puede formar un vector que contabilice las
frecuencias de cada elemento, y obtener un algoritmo de contabilizacin
eficaz
eficaz.

44
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Mtodos sofisticados
algoritmo frecuencias(n, v; ; vordenado)
inicio
para i de mnimo a mximo //Inicializa vector de frecuencias
frec [i] 0
fin-para
p
para i de 1 a n //Construye vector de frecuencias
frec[v[i]] frec[v[i]] + 1
fin-para
para i de mnimo+1 a mximo //Construye vector de frecuencias acumuladas
frec[i] frec[i-1]+frec[i]
fin para
fin-para
para i de n a 1 paso 1 //Ordena
vordenado[frec[v[i]] v[i]
f [ [i]] frec[v[i]]
frec[v[i]] f [ [i]] - 1
fin-para
fin 45
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

6 4 5 6 4 8 6
Ejemplo frecuencias
Paso 1. Construir vector de frecuencias 8 7 6 5 4
1 0 3 1 2
Paso 2. Construir vector de frecuencias acumuladas

8 7 6 5 4
7 6 6 3 2
Paso 3. Colocacin de v en ordenado

1 n
v 6 4 5 6 4 8 6 8 7 6 5 4
7 6 5 3 2 frec
6 max min
46
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ejemplo frecuencias
6 4 5 6 4 8 6 8 7 6 5 4
6 6 5 3 2
6 8

6 4 5 6 4 8 6 8 7 6 5 4
6 6 5 3 1
4 6 8

6 4 5 6 4 8 6 8 7 6 5 4
6 6 4 3 1
4 6 6 8
47
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ejemplo frecuencias
6 4 5 6 4 8 6 8 7 6 5 4
6 6 4 2 1
4 5 6 6 8

6 4 5 6 4 8 6 8 7 6 5 4
6 6 4 2 0
4 4 5 6 6 8

6 4 5 6 4 8 6 8 7 6 5 4
6 6 3 2 0
4 4 5 6 6 6 8
48
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenacin de ficheros (externa)


Ordenacin de ficheros. Ordenar los registros de un fichero
segn
algn
l campo. Operacin
O i muy comn en aplicaciones
li i
de gestin.
Los mtodos de ordenacin interna no resultan eficientes
cuando los datos estn almacenados en un fichero (los
intercambios de elementos son muy costosos).
Existen mtodos de ordenacin de ficheros, basados en otras
tcnicas, que utilizan estructuras de datos adicionales y que se
escapan de nuestros objetivos:
Ordenacin mediante fusin.
Ordenacin n-vas.

49
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Ordenes de eficiencia

tiempo

tamao del problema

50
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Conclusiones
El mtodo de la burbuja es el peor de todos, y su versin mejorada, de la
sacudida,
did es iincluso
l peor que llos dde iinsercin
i y seleccin
l i di directa.
t
En general, el mtodo de seleccin directa es preferible al de insercin
directa e insercin binaria, aunque en los casos en que los elementos estn
inicialmente ordenados o casi ordenados, estos ltimos pueden ser algo
ms rpidos.
El mtodo Shell es ms rpido que todos los anteriores
anteriores, pero menos eficaz
que los de orden nlogn.
Los mtodos sofisticados (orden nlogn) requieren menos operaciones que
l dems,
los d pero all ser normalmente
l ms complejos
l j en detalle,
d ll no se deben
d b
utilizar para valores pequeos de n.
De los mtodos sofisticados,, el q quicksort es el ms eficaz.

51
Eva Lucrecia Gibaja Galindo. Departamento de Informtica y Anlisis Numrico

Conclusiones
mejor
mejor O(n2)
O( O( l
O(nlogn)
) O( )
O(n)
Insercin Shell Quicksort2 Contabilizacin
Seleccin directa1 de frecuencias
Insercin binaria
Insercin directa
Burbuja (sacudida)
Burbuja

1. Cuando los elementos estn prcticamente ordenados insercin binaria y directa


pueden ser algo ms rpidos.
2. No se deben utilizar con pequeos valores de n.

52

Potrebbero piacerti anche