Você está na página 1de 9

ORDENAMIENTO

Es la operacin de arreglar los registros de una tabla en algn orden


secuencial de
acuerdo a un criterio de ordenamiento. El ordenamiento se efecta con base
en el valor
de algn campo en un registro. El propsito principal de un ordenamiento es
el de
facilitar las bsquedas de los miembros del conjunto ordenado.
El ordenar un grupo de datos significa mover los datos o sus referencias para
que
queden en una secuencia tal que represente un orden, el cual puede ser
numrico,
alfabtico o incluso alfanumrico, ascendente o descendente.

Algoritmo de ordenamiento por Seleccin (Selection Sort en ingls): Consiste en encontrar


el menor de todos los elementos del arreglo o vector e intercambiarlo con el que est en la
primera posicin. Luego el segundo mas pequeo, y as sucesivamente hasta ordenarlo todo. Su
implementacin requiere O(n2) comparaciones e intercambios para ordenar una secuencia de
elementos.
Descripcin
Este algoritmo mejora ligeramente el algoritmo de la burbuja. En el caso de tener que ordenar
un vector de enteros, esta mejora no es muy sustancial, pero cuando hay que ordenar un vector
de estructuras ms complejas, la operacin de intercambiar los elementos sera ms costosa en
este caso. Su funcionamiento se puede definir de forma general como:

Buscar el mnimo elemento entre una posicin i y el final de la lista

Intercambiar el mnimo con el elemento de la posicin i

As, se puede escribir el siguiente pseudocdigo para ordenar una lista de n elementos
indexados desde el 1:
para i=1 hasta n-1;
minimo = i;
para j=i+1 hasta n
si lista[j] < lista[minimo] entonces
minimo = j
fin si
fin para
intercambiar(lista[i], lista[minimo])
fin para

Ejemplo
El arreglo a ordenar es a = ['a','s','o','r','t','i','n','g','e','x','a','m','p','l','e']. Se empieza por recorrer el
arreglo hasta encontrar el menor elemento. En este caso el menor elemento es la primera 'a'. De
manera que no ocurre ningn cambio. Luego se procede a buscar el siguiente elemento y se
encuentra la segunda 'a'. Esta se intercambia con el dato que est en la segunda posicin, la 's',
quedando el arreglo as despus de dos recorridos: a = ['a','a','o','r','t','i','n','g','e','x','s','m','p','l','e'].
El siguiente elemento, el tercero en orden de menor mayor es la primera 'e', la cual se
intercambia con lo que est en la tercera posicin, o sea, la 'o'. Le sigue la segunda 's', la cual es
intercambiada con la 'r'. El arreglo ahora se ve de la siguiente manera: a =
['a','a','e','e','t','i','n','g','o','x','s','m','p','l','r']. De esta manera se va buscando el elemento que debe
ir en la siguiente posicin hasta ordenar todo el arreglo.
Anlisis del Costo Computacional
El ciclo externo se ejecuta n veces para una lista de n elementos, o sea que para ordenar un
vector de n trminos, tiene que realizar siempre el mismo nmero de comparaciones. c(n)= (n2n)/2 Cada bsqueda requiere comparar todos los elementos no clasificados, de manera que el
nmero de comparaciones c(n) no depende del orden de los trminos, si no del nmero de
trminos; por lo que este algoritmo presenta un comportamiento constante independiente del
orden de los datos. Luego la complejidad es del orden n2.
Estabilidad, Ventajas y Desventajas
Puede que exista algo de discrepancia en cuanto a si es o no estable este algoritmo, pero en
realidad esta implementacin parece ser bastante estable. Se puede verificar esto ordenando un
conjunto de datos que tenga un par de ellos con la misma clave. Se vera claramente que el orden
relativo entre ellos es conservado. Algunos autores no lo consideran asi, pero
independientemente de esto, este algoritmo tienes entre sus ventajas: Es fcil su
implementacin. No requiere memoria adicional. Realiza pocos intercambios. Tiene un
rendimiento constante, pues existe poca diferencia entre el peor y el mejor caso. Como todos
tambin tiene algunas desventajas: Es lento y poco eficiente cuando se usa en listas grandes o
medianas. Realiza numerosas comparaciones.

Ordenamiento por seleccin

Animacin del Selection Sort


El ordenamiento por seleccin (Selection Sort en ingls) es un algoritmo de ordenamiento que
requiere O

operaciones para ordenar una lista de n elementos.

ndice

1 Descripcin del algoritmo

2 Rendimiento del algoritmo

3 Vase tambin

4 Enlaces externos

Descripcin del algoritmo


Su funcionamiento es el siguiente:

Buscar el mnimo elemento de la lista

Intercambiarlo con el primero

Buscar el siguiente mnimo en el resto de la lista

Intercambiarlo con el segundo

Y en general:

Buscar el mnimo elemento entre una posicin i y el final de la lista

Intercambiar el mnimo con el elemento de la posicin i

De esta manera se puede escribir el siguiente pseudocdigo para ordenar una lista de n
elementos indexados desde el 1:
para i=1 hasta n-1
minimo = i;
para j=i+1 hasta n
si lista[j] < lista[minimo] entonces
minimo = j /* (!) */
fin si
fin para
intercambiar(lista[i], lista[minimo])
fin para
Este algoritmo mejora ligeramente el algoritmo de la burbuja. En el caso de tener que ordenar
un vector de enteros, esta mejora no es muy sustancial, pero cuando hay que ordenar un vector
de estructuras ms complejas, la operacin intercambiar() sera ms costosa en este caso. Este
algoritmo realiza muchas menos operaciones intercambiar() que el de la burbuja, por lo que lo
mejora en algo. Si la lnea comentada con (!) se sustituyera por intercambiar(lista[i], lista[j])
tendramos una versin del algoritmo de la burbuja (naturalmente eliminando el orden
intercambiar del final).
Otra desventaja de este algoritmo respecto a otros como el de burbuja o de insercin directa es
que no mejora su rendimiento cuando los datos ya estn ordenados o parcialmente ordenados.
As como, por ejemplo, en el caso de la ordenacin de burbuja se requerira una nica pasada
para detectar que el vector ya est ordenado y finalizar, en la ordenacin por seleccin se
realizaran el mismo nmero de pasadas independientemente de si los datos estn ordenados o
no.
Rendimiento del algoritmo
Artculo principal: Cota ajustada asinttica
Al algoritmo de ordenamiento por seleccin, para ordenar un vector de n trminos, tiene que
realizar siempre el mismo nmero de comparaciones:

Esto es, el nmero de comparaciones c(n) no depende del orden de los trminos, si no del
nmero de trminos.

Por lo tanto la cota ajustada asinttica del nmero de comparaciones pertenece al orden de n
cuadrado.

El nmero de intercambios i(n), tambin es fijo, tngase en cuenta que la instruccin:


intercambiar(lista[i], lista[minimo])
siempre se ejecuta, aun cuando i= minimo, lo que da lugar:

sea cual sea el vector, y el orden de sus trminos, lo que implica en todos los casos un coste
lineal:

la cota ajustada asinttica del numero de intercambios es lineal, del orden de n.


Asimismo, la formula que representa el rendimiento del algoritmo, viene dada por la funcin:

2. Pseudocdigo en C.
^
Tabla de variables
Nombre

Tipo

Uso

lista

Cualquiera

Lista a ordenar

TAM

Constante entera

Tamao de la lista

Entero

Contador

pos_men Entero

Posicin del menor elemento de la lista

temp

Para realizar los intercambios

1.
2.
3.
4.
5.

El mismo que los elementos de la lista


for (i=0; i<TAM - 1; i++)
pos_men = Menor(lista, TAM, i);
temp = lista[i];
lista[i] = lista [pos_men];
lista [pos_men] = temp;

Nota: Menor(lista, TAM, i) es una funcin que busca el menor elemento entre las posiciones i y
TAM-1. La bsqueda es lineal (elemento por elemento). No lo incluyo en el pseudocdigo
porque es bastante simple.

Descripcin.
^
Este algoritmo tambin es sencillo. Consiste en lo siguiente:

Buscas el elemento ms pequeo de la lista.

Lo intercambias con el elemento ubicado en la primera posicin de la lista.

Buscas el segundo elemento ms pequeo de la lista.

Lo intercambias con el elemento que ocupa la segunda posicin en la lista.

Repites este proceso hasta que hayas ordenado toda la lista.

3. Un ejemplo.
Vamos a ordenar la siguiente lista (la misma del ejemplo anterior :-) ):
4-3-5-2-1
Comenzamos buscando el elemento menor entre la primera y ltima posicin. Es el 1. Lo
intercambiamos con el 4 y la lista queda as:
1-3-5-2-4
Ahora buscamos el menor elemento entre la segunda y la ltima posicin. Es el 2. Lo
intercambiamos con el elemento en la segunda posicin, es decir el 3. La lista queda as:
1-2-5-3-4
Buscamos el menor elemento entre la tercera posicin (s, adivinaste :-D) y la ltima. Es el 3,
que intercambiamos con el 5:
1-2-3-5-4
El menor elemento entre la cuarta y quinta posicin es el 4, que intercambiamos con el 5:
1-2-3-4-5
Y terminamos! Ya tenemos nuestra lista ordenada. Fue fcil no?
4. Anlisis del algoritmo.

Estabilidad: Aqu discrepo con un libro de la bibliografa que dice que no es estable. Yo
lo veo as: si tengo dos registros con claves iguales, el que ocupe la posicin ms baja
ser el primero que sea identificado como menor. Es decir que ser el primero en ser
desplazado. El segundo registro ser el menor en el siguiente ciclo y quedar en la
posicin adyacente. Por lo tanto se mantendr el orden relativo. Lo que podra hacerlo
inestable sera que el ciclo que busca el elemento menor revisara la lista desde la ltima
posicin hacia atrs. Qu opinas t? Yo digo que es estable, pero para hacerle caso al
libro (el autor debe sabe ms que yo cierto?:-)) vamos a decir que no es estable.

Requerimientos de Memoria: Al igual que el ordenamiento burbuja, este algoritmo slo


necesita una variable adicional para realizar los intercambios.

Tiempo de Ejecucin: El ciclo externo se ejecuta n veces para una lista de n elementos.
Cada bsqueda requiere comparar todos los elementos no clasificados. Luego la
complejidad es O(n2). Este algoritmo presenta un comportamiento constante
independiente del orden de los datos. Luego la complejidad promedio es tambin O(n2).

Ventajas:

Fcil implementacin.

No requiere memoria adicional.

Realiza pocos intercambios.

Rendimiento constante: poca diferencia entre el peor y el mejor caso.

Desventajas:

Lento.

Realiza numerosas comparaciones.

Este es un algoritmo lento. No obstante, ya que slo realiza un intercambio en cada ejecucin
del ciclo externo, puede ser una buena opcin para listas con registros grandes y claves
pequeas. Si miras el programa de demostracin notars que es el ms rpido en la parte grfica
(por lo menos en un PC lento y con una tarjeta grfica mala como el mo x-|). La razn es que es
mucho ms lento dibujar las barras que comparar sus largos (el desplazamiento es ms costoso
que la comparacin), por lo que en este caso especial puede vencer a algoritmos como
Quicksort.
Bien, ya terminamos con ste. Otra vez te recomiendo que hagas un programa y trates de
implementar este algoritmo, de preferencia sin mirar el cdigo ni el pseudocdigo otra vez.
Algoritmo de ordenamiento por Seleccin (Selection Sort en ingls): Consiste en encontrar
el menor de todos los elementos del arreglo o vector e intercambiarlo con el que est en la
primera posicin. Luego el segundo mas pequeo, y as sucesivamente hasta ordenarlo todo. Su
implementacin requiere O(n2) comparaciones e intercambios para ordenar una secuencia de
elementos.
#include<stdio.h>
#include<conio.h>
int x[4]={1,4,8,6};
int n=4,j=0,i=0;
int temp=0,minimo=0;
void main(){
clrscr();
for(i=0;i<n-1;i++)
{
minimo=i;
for(j=i+1;j<n;j++)
{
if(x[minimo] > x[j])
{
minimo=j;
}
}
temp=x[minimo];
x[minimo]=x;

x=temp;
}
for(i=0;i<n;i++)
{
printf("%d",x);
}
getch();
}

Você também pode gostar