0% encontró este documento útil (0 votos)
73 vistas8 páginas

Métodos de Ordenamiento en Programación

Este documento describe varios métodos de ordenamiento de datos, incluyendo ordenamiento de burbuja, por selección, con árbol binario, por inserción e intercalación. Explica cómo funciona cada método y proporciona ejemplos de pseudocódigo.

Cargado por

Yair Salamanca
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
73 vistas8 páginas

Métodos de Ordenamiento en Programación

Este documento describe varios métodos de ordenamiento de datos, incluyendo ordenamiento de burbuja, por selección, con árbol binario, por inserción e intercalación. Explica cómo funciona cada método y proporciona ejemplos de pseudocódigo.

Cargado por

Yair Salamanca
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Instituto Politcnico Nacional

Escuela Superior de Ingeniera


Mecnica Y Elctrica.
ESIME CulhuaCn.

IngEnIEra En Comunicaciones y
ElECtrnICa

Edith Glez. Lee

Mtodos de ordenamiento

Grupo: 3em26

-Martnez Salamanca Yair


Metodos de ordenamiento

Debido a que las estructuras de datos son utilizadas para almacenar informacin,
para poder recuperar esa informacin de manera eficiente es deseable que aquella
est ordenada. Existen varios mtodos para ordenar las diferentes estructuras de
datos bsicas.
En general los mtodos de ordenamiento no son utilizados con frecuencia, en
algunos casos slo una vez. Hay mtodos muy simples de implementar que son
tiles en los casos en dnde el nmero de elementos a ordenar no es muy
grande.Por otro lado hay mtodos sofisticados, ms difciles de implementar pero
que son ms eficientes en cuestin de tiempo de ejecucin.
Los mtodos sencillos por lo general requieren de aproximadamente n x n pasos
para ordenar n elementos.
Los mtodos simples son: insertion sort (o por insercin directa) selection sort,
bubble sort, y shellsort, en dnde el ltimo es una extensin al insertion sort, siendo
ms rpido. Los mtodos ms complejos son el quick-sort, el heap sort, radix y
address-calculation sort. 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.

Se ha dicho que el ordenamiento puede efectuarse moviendo los registros con las
claves. El mover un registro completo implica un costo, el cual se incrementa
conforme sea mayor el tamao del registro. Es por ello que es deseable evitar al
mximo el movimiento de los registros. Una alternativa es el crear una tabla de
referencias a los registros y mover las referencias y no los datos. A continuacin, se
mostrarn los mtodos de ordenamiento empezando por el ms sencillo y
avanzando hacia los mas sofisticados
La eficiencia de los algoritmos se mide por el nmero de comparaciones e
intercambios que tienen que hacer, es decir, se toma n como el nmero de
elementos que tiene el arreglo a ordenar y se dice que un algoritmo realiza O(n2)
comparaciones cuando compara n veces los n elementos, n x n = n2.
Ordenamiento de burbuja

La Ordenacin de burbuja (Bubble Sort en ingls) es un sencillo algoritmo de


ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada
con el siguiente, intercambindolos de posicin si estn en el orden equivocado. Es
necesario revisar varias veces toda la lista hasta que no se necesiten ms
intercambios, lo cual significa que la lista est ordenada. Este algoritmo obtiene su
nombre de la forma con la que suben por la lista los elementos durante los
intercambios, como si fueran pequeas "burbujas". Tambin es conocido como el
mtodo del intercambio directo. Dado que solo usa comparaciones para operar
elementos, se lo considera un algoritmo de comparacin, siendo el ms sencillo de
implementar.

burbuja
#include<stdio.h> a[j+1]=aux;
#include<conio.h> }
int a[3]={3,2,1}; }
int i,j,aux,n=3; }
void main(){ for(i=0;i<3;i++)
clrscr(); {
for(i=0;i<=n;i++){ printf("%d",a);
for(j=0;j<n-1;j++){ }
if(a[j]>a[j+1]){ getch();
aux=a[j]; }
a[j]=a[j+1];
Ordenamiento por seleccin

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


ordenamiento que requiere O(n^2) operaciones para ordenar una lista de n
elementos.
Su funcionamiento es el siguiente:
Buscar el mnimo elemento de la lista
Intercambiarlo con el primero
Buscar el 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
Ordenamiento con rbol binario

El ordenamiento con rbol binario es un algoritmo de ordenamiento, el cual ordena


sus elementos haciendo uso de un rbol binario de bsqueda. Se basa en ir
construyendo poco a poco el rbol binario introduciendo cada uno de los elementos,
los cuales quedarn ya ordenados. Despus, se obtiene la lista de los elementos
ordenados recorriendo el rbol en inorden.

preorden(nodo) inorden(nodo) postorden(nodo)


si nodo == nulo si nodo == nulo si nodo == nulo
entonces retorna entonces retorna entonces retorna
imprime nodo.valor inorden(nodo.izquierda postorden(nodo.izquier
) da)
preorden(nodo.izquier
da) imprime nodo.valor postorden(nodo.derec
ha)
preorden(nodo.derech inorden(nodo.derecha)
a) imprime nodo.valor
Ordenamiento por insercion

El ordenamiento por insercin (insertion sort en ingls) es una manera muy natural
de ordenar para un ser humano, y puede usarse fcilmente para ordenar un mazo
de cartas numeradas en forma arbitraria. Requiere O(n) operaciones para ordenar
una lista de n elementos.

Inicialmente se tiene un solo elemento, que obviamente es un conjunto ordenado.


Despus, cuando hay k elementos ordenados de menor a mayor, se toma el
elemento k+1 y se compara con todos los elementos ya ordenados, detenindose
cuando se encuentra un elemento menor (todos los elementos mayores han sido
desplazados una posicin a la derecha) o cuando ya no se encuentran elementos
(todos los elementos fueron desplazados y este es el ms pequeo). En este punto
se inserta el elemento k+1 debiendo desplazarse los dems elementos.

inserccion {
#include<stdio.h> a[j]=a[j-1];
#include<conio.h> j--;
int a[4]={4,1,7,2}; }
int n=4; a[j]=aux;
int i,j,aux; }
void main(){ for(i=0;i<4;i++)
clrscr(); {
for(i=1;i<n;i++) printf("%d",a);
{ }
j=i; getch();
aux=a; }
while(j>0 && aux<a[j-1])
Ordenamiento por Intercalacin

La intercalacin es otro procedimiento recursivo que adems pertenece a los


del paradigma divide y vencers. Dicho paradigma se basa en tres pasos:
Dividir el problema en un cierto nmero de sub-problemas.
Vencer cada problema acudiendo al principio de divide y vencers nuevamente.
Si el problema ya es lo suficientemente fcil, resolverlo de manera directa.
Combinar las soluciones parciales en la solucin global.
En el caso de la intercalacin esto ocurre de la manera siguiente:
Dividir: Partir el arreglo de n elementos en dos mitades.
Vencer: Ordenar los dos sub-arreglos con ordenamiento por intercalacin.
Combinar: Intercalar los dos sub-arreglos en forma ordenada para producir el
arreglo final ordenado.
El proceso debe llegar siempre a sub-arreglos de un elemento, pues estos ya
estn ordenados. El cdigo ser el siguiente.

void intercala (int *A, int l, int r) }


{ }
int m; void combina(int *A, int l, int m, int r)
void intercala(int *, int, int); {
void combina(int *, int, int, int); int i, j, k;
if (l<r) for(i=l, j=m, k=l; k<r; k++)
{ if ((j>=r)||((i<m)&&(A[i]<=A[j])))
m=(l+r)/2; A[k]=A[i++];
intercala(A, l, m); else
intercala(A, m+1, r); A[k]=A[j++];
combina(A,l,m,r); }
Ordenamiento shell

El ordenamiento Shell (Shell sort en ingls) es un algoritmo de ordenamiento. El


mtodo se denomina Shell en honor de su inventor Donald Shell. Su implementacin
original, requiere O(n2) comparaciones e intercambios en el peor caso. Un cambio
menor presentado en el libro de V. Pratt produce una implementacin con un
rendimiento de O(n log2 n) en el peor caso. Esto es mejor que las O(n2)
comparaciones requeridas por algoritmos simples pero peor que el ptimo O(n log
n). Aunque es fcil desarrollar un sentido intuitivo de cmo funciona este algoritmo,
es muy difcil analizar su tiempo de ejecucin.

El algoritmo Shell sort mejora el ordenamiento por insercin comparando elementos


separados por un espacio de varias posiciones. Esto permite que un elemento haga
"pasos ms grandes" hacia su posicin esperada. Los pasos mltiples sobre los
datos se hacen con tamaos de espacio cada vez ms pequeos. El ltimo paso
del Shell sort es un simple ordenamiento por insercin, pero para entonces, ya est
garantizado que los datos del vector estn casi ordenados.

shell scanf("%d",& a); a[k]=aux;

#include<stdio.h> } j=j-inter;

#include<conio.h> while(inter>0){ }

int a[5]; for(i=inter;i<n;i++) }

int n=5; { }

void main() j=i-inter; inter=inter/2;

{ while(j>=0) { }

int k=j+inter; for(i=0;i<5;i++)


inter=(n/2),i=0,j=0,k=0, if(a[j]<=a[k]){ {
aux;
j--; printf("%d n",a);
clrscr();
} getch();
for (i=0; i<5; i++)
else{ }
{
aux=a[j]; }
printf("INSERTA UN
VALOR DEL INDICE a[j]=a[k];
%d", i);

También podría gustarte