Sei sulla pagina 1di 7

UNIVERSIDAD NACIONAL DE CAJAMARCA

ESCUELA ACADMICO PROFESIONAL


INGENIERIA DE SISTEMAS

METODO DE ORDENAMIENTO

INTRODUCCIN

Los algoritmos de ordenamiento nos permiten, como su nombre lo dice, ordenar. En


este caso, nos servirn para ordenar vectores o matrices con valores asignados
aleatoriamente. Nos centraremos en los mtodos ms populares, analizando la
cantidad de comparaciones que suceden, el tiempo que demora y revisando el cdigo,
escrito en Java, de cada algoritmo.
Este informe nos permitir conocer ms a fondo cada mtodo distinto de
ordenamiento, desde uno simple hasta el ms complejo. Se realizaran comparaciones
en tiempo de ejecucin, pre-requisitos de cada algoritmo, funcionalidad, alcance, etc.

OBJETIVOS
Despus del estudio de este trabajo usted podr:
Conocer los algoritmos basados en el intercambio de elementos.
Conocer el algoritmo de ordenacin por insercin.
Conocer el algoritmo de seleccin.
Distinguir entre los algoritmos de ordenacin basados en el intercambio y en la
insercin.
Deducir la eficiencia de los mtodos bsicos de ordenacin.
Conocer los mtodos ms eficientes de ordenacin.
Aplicar mtodos mas eficientes de ordenacin de arrays (arreglos).
Diferenciar entre bsqueda secuencial y bsqueda binaria.

UNIVERSIDAD NACIONAL DE CAJAMARCA


ESCUELA ACADMICO PROFESIONAL
INGENIERIA DE SISTEMAS

ORDENAMIENTO
1. Mtodos de Ordenamiento
a) Tipos de Ordenamiento
La ordenacin o clasificacin de datos consiste en la disposicin de los mismos de acuerdo con algn
valor o caracterstica. Por ejemplo, cada elemento de una agenda telefnica tiene un campo nombre,
un campo direccin y un campo nmero telefnico. Por lo regular los datos en la agenda se
encuentran organizados en un orden de la A la Z. De la misma forma un lista vector de datos se dice
que esta ordenado de manera ascendente, si X [ i ] <= X [ i +1] y, por otro lado, se dice que esta
ordenado de manera descendente s X [ i ] >= X [ i +1].
El proceso de ordenacin es uno de los mecanismos ms interesantes cuando llega el momento de
mostrar que existen mltiples soluciones para un mismo problema, y que cada solucin algortmica
tiene sus propias ventajas y desventajas.
Una forma de medir la eficiencia de un algoritmo de esta clase, es verificar el nmero de
comparaciones entre valores clave, adems del nmero de movimientos que se tengan que realizar
entre elementos (intercambios) de la lista.
Los mtodos de ordenamiento que trabajan con estructuras de datos residentes en memoria principal
se denominan Ordenamientos Internos, mientras que las implementaciones que utilizan estructuras de
datos residentes en archivos se conocen como Ordenamientos externos.
b) Ordenamiento Interno
Los mtodos de ordenamiento interno trabajan en memoria principal y sus implementaciones son muy
variadas, de manera que la eleccin del algoritmo adecuado debe realizarse con criterios de eficiencia
(tiempo y ejecucin) y en funcin de la memoria disponible. Dividiremos los mtodos en dos grandes
grupos:
Directos (burbuja, seleccin e insercin).
Logartmicos (Shell sort, Merge sort, Heap sort, Quick sort, Radix).
En el caso de listas pequeas, los mtodos directos se desempean de manera relativamente
eficientes, ya que la codificacin del algoritmo correspondiente no es compleja. Su uso es muy
frecuente. Sin embargo, en arreglos grandes las ordenaciones directas resultan ineficientes y se
necesitara un mtodo logartmico para su solucin.

I.
BURBUJA
Es uno de los mtodos relativamente ms sencillo e intuitivo, pero tambin resulta ser muy ineficiente. Se
basa en la ordenacin por cambio, y recibe su nombre de la semejanza con las burbujas de un depsito
de agua donde cada burbuja busca su propio nivel. Los pasos a efectuar en el caso de una ordenacin
ascendente (en el caso de la ordenacin descenderte solo habra que cambiar el signo de comparacin)
son:

UNIVERSIDAD NACIONAL DE CAJAMARCA


ESCUELA ACADMICO PROFESIONAL
INGENIERIA DE SISTEMAS
1. Comparar el primer y segundo elemento, intercambiarlos si el primero es mayor que el segundo; luego
se compara el primero con el tercero, intercambindose en caso necesario, y el proceso se repite hasta
llegar al ltimo elemento. De este modo, tras la primera iteracin la casilla primera conservara el elemento
ms pequeo de esa iteracin. UAA Sistemas Electrnicos Estructura de Datos Serna
2. Se repite el paso anterior, pero ahora con el segundo y tercero, en caso de ser necesario se
intercambian, y as hasta llegar a comparar el segundo con el ultimo.
Consideremos el siguiente ejemplo. Se cuenta con un vector de 6 posiciones donde se inicia una lista de
nmeros { 7, 2, 8, 3, 5, 1 }, la cual ser ordenada en forma ascendente { 1, 2, 3, 5, 7, 8 }, observe como se
declara una variable constante entera llamada n la cual tiene un valor de 6, enseguida se declara un
vector de tipo entero que contendr una cantidad n de casillas, en este caso 6, declaramos tambin las
variables i y j que nos ayudaran a desplazarnos entre casilla y casilla para hacer las comparaciones. Y
finalmente la variable tem, almacenara temporalmente el valor a intercambiar entre las casillas que lo
necesiten.
El proceso sera de la siguiente manera:
1ra iteracin, i permanece fijo en la casilla 0 y j se incrementa hasta llegar al ltimo elemento:
{7, 2, 8, 3, 5, 1} j = 1, intercambio generando { 2, 7, 8, 3, 5, 1 }, enseguida
{2, 7, 8, 3, 5, 1} j = 2, no genera intercambio
{2, 7, 8, 3, 5, 1} j = 3, no genera intercambio
{2, 7, 8, 3, 5, 1} j = 4, no genera intercambio
{2, 7, 8, 3, 5, 1} j = 5, intercambio generando {1, 7, 8, 3, 5, 2 }, termina iteracin
2da iteracin, i permanece fijo en la casilla 1 y j se incrementa hasta llegar al ltimo elemento:
{1, 7, 8, 3, 5, 2} j = 2, no genera intercambio
{1, 7, 8, 3, 5, 2} j = 3, intercambio generando {1, 3, 8, 7, 5, 2 }, enseguida
{1, 3, 8, 7, 5, 2} j = 4, no genera intercambio
{1, 3, 8, 7, 5, 2} j = 5, intercambio generando {1, 2, 8, 7, 5, 3}, termina iteracin
3ra iteracin, i permanece fijo en la casilla 2 y j se incrementa hasta llegar al ltimo elemento:
{1, 2, 8, 7, 5, 3} j = 3, intercambio generando {1, 2, 7, 8, 5, 3 }
{1, 2, 7, 8, 5, 3} j = 4, intercambio generando {1, 2, 5, 8, 7, 3}
{1, 2, 5, 8, 7, 3} j = 5, intercambio generando {1, 2, 3, 8, 7, 5}, termina iteracin
4ta iteracin, i permanece fijo en la casilla 3 y j se incrementa hasta llegar al ltimo elemento:
{1, 2, 3, 8, 7, 5} j = 4, intercambio generando {1, 2, 3, 7, 8, 5}
{1, 2, 3, 7, 8, 5} j = 5, intercambio generando {1, 2, 3, 5, 8, 7}, termina iteracin
5ta iteracin, i permanece fijo en la casilla 4 y j se incrementa hasta llegar al ltimo elemento:
{1, 2, 3, 5, 8, 7} j = 5, intercambio generando {1, 2, 3, 5, 7, 8}, termina proceso

UNIVERSIDAD NACIONAL DE CAJAMARCA


ESCUELA ACADMICO PROFESIONAL
INGENIERIA DE SISTEMAS

Ejemplos pseudocodigo
INICIO
ENTERO X, Z, matrix (N)
X =0
MIENTRAS (X<N){
Z=N
MIENTRAS (X>=N){
SI (matrix [Z] < matrix [Z-1]){
INTERCAMBIO (matrix [Z] < matrix [Z-1])}
Z=Z-1}
X=X+1}
FIN
Ejemplo java
2 public static void burbuja(int[]matrix){
3
int temp;
4
for(int i=1;i < matrix.length;i++){
5
for (int j=0 ; j < matrix.length- 1; j++){
6
if (matrix[j] > matrix[j+1]){
7
temp = matrix[j];
8
matrix[j] = matrix[j+1];
9
matrix[j+1] = temp;
10
}
11
}
12
}
13
}

II.
SELECCIN
La idea bsica es encontrar el elemento ms pequeo (grande), en orden ascendente de la lista, e
intercambiarlo con el elemento que ocupa la primera posicin en la lista, a continuacin se busca el siguiente
elemento ms pequeo y se transfiere a la segunda posicin. Se repite el proceso hasta que el ltimo
elemento ha sido transferido a su posicin correcta.
El algoritmo de ordenacin depende a su vez del algoritmo necesario para localizar el componente mayor
(menor) de un array. Es un proceso muy similar al mtodo de la burbuja pero haciendo ms eficiente la
bsqueda y evitando intercambios innecesarios. Consideremos el mismo arreglo del ejemplo anterior { 7, 2, 8,
3, 5, 1 }. El proceso sera de la siguiente manera:
1ra iteracin, i permanece fijo en la casilla 0 y j se incrementa hasta llegar al ltimo elemento:
{7, 2, 8, 3, 5, 1} k = 0, j = 1, cambio k = j ya que en j esta el menor
{7, 2, 8, 3, 5, 1} k = 1, j = 2, no genera cambio
{7, 2, 8, 3, 5, 1} k = 1, j = 3, no genera cambio

UNIVERSIDAD NACIONAL DE CAJAMARCA


ESCUELA ACADMICO PROFESIONAL
INGENIERIA DE SISTEMAS
{7, 2, 8, 3, 5, 1} k = 1, j = 4, no genera cambio
{7, 2, 8, 3, 5, 1} k = 1, j = 5, cambio k = j ya que en j esta el menor, genera { 1, 2, 8, 3, 5, 7 }
2da iteracin, i permanece fijo en la casilla 1 y j se incrementa hasta llegar al ltimo elemento:
{1, 2, 8, 3, 5, 7 } k = 1, j = 2 - 5, no genera cambios
3ra iteracin, i permanece fijo en la casilla 2 y j se incrementa hasta llegar al ltimo elemento:
{1, 2, 8, 3, 5, 7} k = 2, j = 3, cambio k = j ya que en j est el menor
{1, 2, 8, 3, 5, 7} k = 3, j = 4, no genera cambio
{1, 2, 8, 3, 5, 7} k = 3, j = 5, no genera cambio, termina el ciclo, genera { 1, 2, 3, 8, 5, 7 }
4ta iteracin, i permanece fijo en la casilla 3 y j se incrementa hasta llegar al ltimo elemento:
{1, 2, 3, 8, 5,} k = 3, j = 4, cambio k = j ya que en j est el menor
{1, 2, 3, 8, 5,} k = 4, j = 5, no genera cambio, termina el ciclo, genera {1, 2, 3, 5, 8, 7}
5ta iteracin, i permanece fijo en la casilla 4 y j se incrementa hasta llegar al ltimo elemento:
{1, 2, 3, 5, 8, 7 } k = 4, j = 5, cambio k = j ya que en j est el menor, genera { 1, 2, 3, 5, 7, 8 }
Ejemplos pseudocodigo
INICIO
ENTERO I, J, MIN, matrix (N)
I =0
MIENTRAS (I<N){
MIN=I+1
J= I+1
MIENTRAS (J<N){
SI (matrix [J] < matrix [I]){
MIN= J
INTERCAMBIO (matrix [MIN] , matrix [I])}
J= J+1}
I= I+1}
FIN
Ejemplo java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.

int i, j, k, p, buffer, limit = matrix.length-1;


for(k = 0; k < limit; k++){
public static void Seleccion(int[]matrix){
p = k;
for(i = k+1; i < = limit; i++){
if(matrix[i] < matrix[p]) p = i;
if(p != k){
buffer = matrix[p];
matrix[p] = matrix[k];
matrix[k] = buffer;
}
}
}
}

UNIVERSIDAD NACIONAL DE CAJAMARCA


ESCUELA ACADMICO PROFESIONAL
INGENIERIA DE SISTEMAS
III.
INSERCION
Este mtodo tambin se denomina mtodo del jugador de cartas, por la semejanza con la forma de clasificar
las cartas de una baraja, insertando cada carta en el lugar adecuado. El algoritmo ordena los dos primeros
elementos de la lista, a continuacin el tercer elemento se inserta en la posicin que corresponda, el cuarto se
inserta en la lista de tres elementos, y as sucesivamente. Este proceso continua hasta que la lista este
totalmente ordenada.
Sea una lista A[1], A[2], ... A[n]. Los pasos a dar para una ordenacin ascendente son:
1. Ordenar A[1] y A[2].
2. Comparar A[3] con A[2], si A[3] es mayor o igual a que A[2], sigue con el siguiente elemento si no se
compara A[3] con A[1]; si A[3] es mayor o igual que A[1], insertar A[3] entre A[1] yA[2].
Si A[3] es menor que A[1], entonces transferir A[3] a A[1], A[1] a A[2] y A[2] a A[3].
3. Se suponen ordenados los n-1 primeros elementos y corresponde insertar el n-simo elemento. Si A[m] es
mayor que A[k] (con K = 1, 2, ..., m-1), se debe correr una posicin A[k+1], ... A[m-1] y almacenar A[m] en la
posicin k+1. Consideremos el mismo arreglo del ejemplo anterior {7, 2, 8, 3, 5, 1 }. El proceso sera de la
siguiente manera:
1ra iteracin, i permanece fijo en la casilla 1 y j se decrementa mientras el elemento es menor a j:
{7, 2, 8, 3, 5, 1} tem = 2, j = 0, mientras j >= 0 y tem < 7, {7, 7, 8, 3, 5, 1}, j se decrementa en 1
{7, 7, 8, 3, 5, 1} tem = 2, j = -1, mientras j >=0, rompe mientras, tem ingresa {2, 7, 8, 3, 5, 1}
2da iteracin, i permanece fijo en la casilla 2 y j se decrementa mientras el elemento es menor a j:
{2, 7, 8, 3, 5, 1} tem = 8, j = 1, mientras j >= 0 y tem < 7, rompe mientras {2, 7, 8, 3, 5, 1}
3ra iteracin, i permanece fijo en la casilla 3 y j se decrementa mientras el elemento es menor a j:
{2, 7, 8, 3, 5, 1} tem = 3, j = 2, mientras j >= 0 y tem < 8, {2, 7, 8, 8, 5, 1}, j se decrementa en 1
{2, 7, 8, 8, 5, 1} tem = 3, j = 1, mientras j >= 0 y tem < 7, {2, 7, 7, 8, 5, 1}, j se decrementa en 1
{2, 7, 7, 8, 5, 1} tem = 3, j = 0, mientras j >= 0 y tem < 2, rompe, tem ingresa {2, 3, 7, 8, 5, 1}
4ta iteracin, i permanece fijo en la casilla 4 y j se decrementa mientras el elemento es menor a j:
{2, 3, 7, 8, 5, 1} tem = 5, j = 3, mientras j >= 0 y tem < 8, {2, 3, 7, 8, 8, 1}, j se decrementa en 1
{2, 3, 7, 8, 8, 1} tem = 5, j = 2, mientras j >= 0 y tem < 7, {2, 3, 7, 7, 8, 1}, j se decrementa en 1
{2, 3, 7, 7, 8, 1} tem = 5, j = 1, mientras j >= 0 y tem < 3, rompe, tem ingresa {2, 3, 5, 7, 8, 1}
5ta iteracin, i permanece fijo en la casilla 5 y j se decrementa mientras el elemento es menor a j:
{2, 3, 5, 7, 8, 1} tem = 1, j = 4, mientras j >= 0 y tem < 8, {2, 3, 5, 7, 8, 8}, j se decrementa en 1
{2, 3, 5, 7, 8, 8} tem = 1, j = 3, mientras j >= 0 y tem < 7, {2, 3, 5, 7, 7, 8}, j se decrementa en 1
{2, 3, 5, 7, 7, 8} tem = 1, j = 2, mientras j >= 0 y tem < 5, {2, 3, 5, 5, 7, 8}, j se decrementa en 1
{2, 3, 5, 5, 7, 8} tem = 1, j = 1, mientras j >= 0 y tem < 3, {2, 3, 3, 5, 7, 8}, j se decrementa en 1
{2, 3, 3, 5, 7, 8} tem = 1, j = 0, mientras j >= 0 y tem < 2, {2, 2, 3, 5, 7, 8}, j se decrementa en 1
{2, 2, 3, 5, 7, 8} tem = 1, j = -1, mientras j >= 0, rompe mientras, tem ingresa {1, 2, 3, 5, 7, 8}

UNIVERSIDAD NACIONAL DE CAJAMARCA


ESCUELA ACADMICO PROFESIONAL
INGENIERIA DE SISTEMAS

Ejemplos pseudocodigo
INICIO
ENTERO X, Z, AUX, ARREGLO(N)
LOGICO B
PARA(X=1, HASTA N, X=X+1){
AUX = ARRAY[X]
Z=X-1
B= FALSO
MIENTRAS (B= FALSO Y Z >=0){
SI (AUX < ARREGLO[Z]){
ARREGLO[Z+1] = ARREGLO[Z]
Z=Z-1}
SI NO{
B= VERDAD }}
ARREGLO[Z+1] =AUX }
FIN
Ejemplo java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

public static void Insercion (int[] vector) {


for (int i=1; i < vector.length; i++) {
int aux = vector[i];
int j;
for (j=i-1; j > =0 && vector[j] > aux; j--){
vector[j+1] = vector[j];
}
vector[j+1] = aux;
}
}

REFERENCIAS BIBLIOGRFICAS.
http://jorgesanchez.net/programacion/index.html
http://blog.zerial.org/ficheros/Informe_Ordenamiento.pdf
Bubble Sort: An archaeological algorithm analysis

Potrebbero piacerti anche