280 likes | 423 Views
Métodos de ordenación. Definición: Reorganizar un conjunto dado de objetos en una secuencia especificada Objetivo: Facilitar la búsqueda de los elementos del conjunto ordenado. Métodos de ordenación. Los métodos óptimos para ordenar un número pequeño de elementos: Ordenación por selección
E N D
Métodos de ordenación • Definición: Reorganizar un conjunto dado de objetos en una secuencia especificada • Objetivo: Facilitar la búsqueda de los elementos del conjunto ordenado
Métodos de ordenación • Los métodos óptimos para ordenar un número pequeño de elementos: • Ordenación por selección • Ordenación por insercción directa • Ordenación mediante el método de la burbuja • Utilizan un sola tabla • Para ordenar valores grandes existen mejoras de estos tres métodos
Ordenación por selección • Ordena una tabla de n elementos en n-1 iteracciones • Inicialmente no hay posiciones ordenadas • En cada iteracción se ordena una nueva posición de la tabla • En la iteración ise habrán ordenado las iprimeras posiciones de la tabla
Ordenación por selección • Operaciones básicas: • Selecciona el elemento con clave mínima • Intercambio con el primer elemento, a1 • Se repiten estas operaciones con los elementos n-1, n-2, ..., restantes hasta que quede un único elemento, que queda ya ordenado
Ordenación por selección Posición inicial 95 3 1 83 75 |----------------| Primera iteración 1 3 95 83 75 Se ordena la primera posición • Se busca el mínimo entre todos los elementos • Se intercambian el primer valor y el valor mínimo
Ordenación por selección Primera iteración 1 3 95 83 75 Segunda iteración 1 3 95 83 75 Se ordena la segunda posición • Se busca el mínimo entre los elementos que están entre la segunda y la última posición • No se realiza ningún cambio, porque el valor mínimo es el que está en la posición a ordenar
Ordenación por selección Segunda iteración 1 3 95 83 75 |------------------| Tercera iteración 1 3 75 83 95 Se ordena la tercera posición • Se busca el mínimo entre los elementos que están entre la tercera y la última posición • Se intercambia el valor de la tercera posición y el valor mínimo
Ordenación por selección Tercera iteración 1 3 95 83 75 Cuarta iteración 1 3 75 8395 Se ordena la cuarta posición • Se busca el mínimo entre los elementos que están entre la cuarta y la última posición • No se realiza ningún cambio, porque el valor mínimo es el que está en la posición a ordenar La última posición queda ordenada
Ordenación por selección Posición inicial 95 3 1 83 75 |----------------| Primera iteración 1 3 95 83 75 Segunda iteración 1 3 95 83 75 |------------------| Tercera iteración 1 3 75 83 95 Cuarta iteración 1 3 75 8395
Ordenación por selección ALGORITMO GENERAL para j en [1..n-1] hacer “ asignar a jmin el índice correspondiente al elemento con clave mínima de aj .. an ” “ intercambiar ajy ajmin “ fpara
algoritmo Ordenación const N: entero = 25 fconst tipos vector = tabla[1..N] de entero ftipos var v: vector; j, jmin, aux: entero fvar
para j en [1.. n-1] hacer jmin := j para k en [j+1.. n] hacer siv[k] < v[jmin] entonces jmin := k fsi fpara sijmin > j entonces aux := v[jmin]; v[jmin] := v[j]; v[j] := aux fsi fpara falgoritmo
Ordenación por selección const Num: entero = 25 fconst tipos vector = tabla[1..Num] deentero ftipos
acción Ord_selección (e/s a: vector, ent n: entero) var j, jmin: entero fvar para j en [1.. n-1] hacer jmin := Mínimo ( a, j, n) sijmin > j entonces Intercambiar (a, j, jmin) fsi fpara facción Ordenación por selección
funciónMínimo (ent a: vector, ent j, n:entero) retorna entero var k, min: entero fvar min := j para k en [j+1.. n] hacer sia[k] < a[min] entonces min := k fsi fpara retorna min ffunción Ordenación por selección
acciónIntercambiar (e/s a: vector, ent j, k: entero) var aux: entero fvar aux := a[j] a[j] := a[k] a[k] := aux facción Ordenación por selección
algoritmo Ordenación_palabras const Numc: entero = 25 Nump: entero = 100 fconst tipos tpalabra = tabla[1..Nump] depalabra palabra = tabla[1..Numc] decarácter ftipos Ordenación por selección
algoritmo Ordenación_palabras Definición de tipos var tp: tpalabra j, dim : entero fvar LeerPalabras ( tp, dim) Ord_selección ( tp, dim ) EscribirPalabras ( tp, dim) falgoritmo Ordenación por selección
acción Ord_selección (e/stp:tpalabra, ent n:entero) var j, jmin: entero fvar para j en [1.. n-1] hacer jmin := Mínimo(tp, j, n) si jmin > j entonces Intercambiar (tp, j, jmin) fsi fpara facción Ordenación por selección
funciónMínimo (enttp:tpalabra, ent j, n:entero) retorna entero var k, min: entero fvar min := j para k en [ j+1.. n] hacer si tp[k] < tp[min] entonces min := k fsi fpara retorna min ffunción Ordenación por selección
acción Intercambiar(e/stp:tpalabra, entj,k:entero) var aux: palabra fvar aux := tp[j] tp[j] := tp[k] tp[k]:= aux facción Ordenación por selección
acción LleerPalabras(sal tp:tpalabra,sal n:entero) n := 1 tp[n] := LeerPalabra() mientras tp[n] != "." hacer n := n+1 tp[n] := LeerPalabra() fmientras n := n-1 facción Ordenación por selección
acciónEscribirPalabras (ent tp:tpalabra, ent n:entero) var j : entero fvar para j en [1.. n] hacer EscribirPalabra (tp[j]) fpara facción Ordenación por selección
const Numc: entero = 25 Nump: entero = 100 fconst tipos tpersona = tabla[1..Nump] depersona persona = tupla dni, edat : entero apellido1,apellido2 : palabra ftupla palabra = tabla[1..Numc] decarácter ftipos Ordenación por selección
algoritmo Ordenación_personas Definición de tipos var tp: tpersona j, dim : entero fvar LeerPersonas ( tp, dim) Ord_selección ( tp, dim ) EscribirPersonas ( tp, dim) falgoritmo Ordenación por selección
acción Ord_selección (e/stp:tpersona, ent n:entero) var j, jmin: entero fvar para j en [1.. n-1] hacer jmin := Mínimo(tp, j, n) si jmin > j entonces Intercambiar (tp, j, jmin) fsi fpara facción Ordenación por selección
funciónMínimo (enttp:tpersona, ent j, n:entero) retorna entero var k, min: entero fvar min := j para k en [ j+1.. n] hacer sitp[k].apellido1 < tp[min].apellido1 o (tp[k].apellido1 = tp[min].apellido1 i tp[k].apellido2 < tp[min].apellido2)entonces min := k fsi fpara retorna min ffunción Ordenación por selección
acción Intercambiar(e/stp:tpersona, entj,k:entero) var aux: persona fvar aux := tp[j] tp[j] := tp[k] tp[k]:= aux facción Ordenación por selección