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 Métodos de ordenació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 i se habrán ordenado las i primeras posiciones de la tabla Ordenación por selección
Operaciones básicas: –Selecciona el elemento con clave mínima –Intercambio con el primer elemento, a 1 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 | | Primera iteración 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 Segunda iteración 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 | | Tercera iteración 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 Cuarta iteración 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 | | Primera iteración Segunda iteración | | Tercera iteración Cuarta iteración Ordenación por selección
para j en [1..n-1] hacer “ asignar a jmin el índice correspondiente al elemento con clave mínima de a j.. a n ” “ intercambiar a j y a jmin “ fpara Ordenación por selección ALGORITMO GENERAL
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 si v[k] < v[jmin] entonces jmin := k fsi fpara si jmin > j entonces aux := v[jmin]; v[jmin] := v[j]; v[j] := aux fsi fpara falgoritmo
const Num: entero = 25 fconst tipos vector = tabla [1..Num] de entero ftipos Ordenación por selección
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) si jmin > j entonces Intercambiar (a, j, jmin) fsi fpara facción Ordenación por selección
función Mínimo (ent a: vector, ent j, n: entero) retorna entero var k, min: entero fvar min := j para k en [j+1.. n] hacer si a[k] < a[min] entonces min := k fsi fpara retorna min ffunción Ordenación por selección
acción Intercambiar (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] de palabra palabra = tabla [1..Numc] de cará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/s tp: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ón Mínimo (ent tp: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/s tp:tpalabra, ent j,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ón EscribirPalabras (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] de persona persona = tupla dni, edat : entero apellido1,apellido2 : palabra ftupla palabra = tabla [1..Numc] de cará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/s tp: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ón Mínimo (ent tp:tpersona, ent j, n:entero) retorna entero var k, min: entero fvar min := j para k en [ j+1.. n] hacer si tp[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/s tp:tpersona, ent j,k :entero) var aux: persona fvar aux := tp[j] tp[j] := tp[k] tp[k]:= aux facción Ordenación por selección