You are on page 1of 12

ORDENAMIENTO EN TIEMPO LINEAL

Foro semana 5 y 6

Integrantes:

Sirley Manuela Rojas Salazar


Maricela Morales Castrillón

POLITÉCNICO GRANCOLOMBIANO
Análisis y verificación de algoritmos
Descripción de cada algoritmo

1. Algoritmo Counting sort

Fue inventado y descubierto por Harold Seward, el único propósito del algoritmo es
clasificar los enteros de una lista dada y superará los algoritmos de clasificación
de propósito general . Es llamado algoritmo de ordenamiento lineal Asume que cada
uno de los 𝑁 elementos a ordenar es un entero en el rango 0 𝑡𝑜 𝑘, para algún entero
𝑘. Cuando 𝑘 = 𝑂 𝑁, la ejecución del método es del orden 𝑂(𝑁).
Para cada elemento 𝑥 se determina el número de elementos menores a 𝑥. Usando
esta información, es posible posicionar al elemento 𝑥 directamente en el arreglo.

 Implementación de Algoritmo JAVA

package algoritmo_de_ordenamiento_tres;

import java.util.*;

public class algoritmo_de_ordenamiento_tres {

public static void sort(int [] a, int maximoValor){

int [] bucket=new int[maximoValor+1];

for (int i=0; i<bucket.length; i++) {

bucket[i]=0;

for (int i=0; i<a.length; i++) {

bucket[a[i]]++;
}

int fuerade=0;

for (int i=0; i<bucket.length; i++) {

for (int j=0; j<bucket[i]; j++) {

a[fuerade++]=i;

public static void main (String [] args) {int maximoValor=248;

int [] data= {128, 120, 113, 200, 98, 24, 12, 4, 2, 1};

System.out.println(" Algoritmo Bucket Sort");

System.out.println(" ");

System.out.println("Números sin orden: " + Arrays.toString(data));

sort(data,maximoValor);

System.out.println(" ");

System.out.println("Aplicando el Ordenamiento Bucket : " + Arrays.toString(data));

Resultado:

Algoritmo Bucket Sort

Números sin orden: [128, 120, 113, 200, 98, 24, 12, 4, 2, 1]
Aplicando el Ordenamiento Bucket: [1, 2, 4, 12, 24, 98, 113, 120, 128, 200]

2. Algoritmo Radix Sort

El método de ordenación por residuos, o Radix Sort, utiliza una aproximación


diferente a la de comparar los elementos del arreglo entre sí. En vez de esto, este
algoritmo recorre el arreglo trasladando cada elemento a una cola determinada por
el residuo, o dígito menos significativo del número. Cuando todos los elementos han
sido trasladados a las colas, se recorren todas las colas en orden trasladando ahora
los elementos al vector. El proceso se repite ahora para los demás dígitos de los
elementos del vector.
 Implementación de Algoritmo JAVA
package algoritmo_de_ordenamiento_dos;

import java.util.Scanner; /* facilita la lectura de datos en los programas Java*/

public class Algoritmo_Radix {

/*O (e * (n + c))

b es dígitos en enteros de entrada.

c es la base para representar números. */

static void sort(int[] b) {

int i, letra = b[0], exp = 1, n = b.length;

int[] c = new int[10];


/*El algoritmo dice que primero

necesitamos encontrar el número de dígitos

en el número más largo*/

for (i = 1; i < n; i++)

if (b[i] > letra)

letra = b[i];

/*Aplicando el ciclo (for if) podemos encontrar el máximo de todos los números*/

while (letra/ exp> 0){

int [] bucket= new int [10];

for (i =0; i < n; i++)

bucket [(b[i]/ exp)% 10]++;

for (i = 1; i < 10; i++)

bucket[i] += bucket[i - 1];

for (i = n - 1; i >= 0; i--)

c[--bucket[(b[i] / exp) % 10]] = b[i];

for (i = 0; i < n; i++)

b[i] = c[i];

exp *= 10;

}
public static void main(String[] args) {

Scanner scan = new Scanner ( System.in); /*objeto de la clase Scanner asociado al dispositivo
de entrada.*/

System.out.println (" Ejecución Algoritmo Radix ");

System.out.println (" ............................");

int n, i;

System.out.println(" Ingrese un Número Par ");

n = scan.nextInt(); /* para leer un entero*/

int arr[]= new int [n];

System.out.println("\n Ingrese " + n + " números enteros");

for (i = 0; i < n; i++)

arr[i] = scan.nextInt();

sort(arr);

System.out.println(" Números De forma Ordenada"

+ " ");

for (i = 0; i < n; i++)

System.out.print(arr[i]+" ");

System.out.println();

}
}

Resultado:

Ejecución Algoritmo Radix

Ingrese un Número Par

Ingrese 4 números enteros

6 2 10 2

Números De forma Ordenada

2 2 6 10

3. Algoritmo Bucket sort

Es un algoritmo de ordenamiento que distribuye todos los elementos a ordenar


entre un número finito de casilleros. Cada casillero sólo puede contener los
elementos que cumplan unas determinadas condiciones. En el ejemplo esas
condiciones son intervalos de números. Las condiciones deben ser excluyentes entre
sí, para evitar que un elemento pueda ser clasificado en dos casilleros distintos.
Después cada uno de esos casilleros se ordena individualmente con otro algoritmo
de ordenación (que podría ser distinto según el casillero), o se aplica recursivamente
este algoritmo para obtener casilleros con menos elementos. Complejidad = n log n
Este sigue una secuencia de pasos:

 Crear una colección de casilleros vacíos


 Colocar cada elemento a ordenar en un único casillero
 Ordenar individualmente cada casillero
 devolver los elementos de cada casillero concatenados por orden.

 Implementación de Algoritmo JAVA

package algoritmo_de_ordenamiento_tres;
import java.util.*;

public class algoritmo_de_ordenamiento_tres {

public static void sort(int[] a, int maximoValor){

int [] bucket=new int[maximoValor+1];

for (int i=0; i<bucket.length; i++) {

bucket[i]=0;

for (int i=0; i<a.length; i++) {

bucket[a[i]]++;

int fuerade=0;

for (int i=0; i<bucket.length; i++) {

for (int j=0; j<bucket[i]; j++) {

a[fuerade++]=i;

public static void main(String[] args) { int maximoValor=248;

int [] data= {128, 120, 113, 200, 98, 24, 12, 4 , 2, 1};
System.out.println(" Algoritmo Bucket Sort");

System.out.println(" ");

System.out.println("Números sin orden: " + Arrays.toString(data));

sort(data,maximoValor);

System.out.println(" ");

System.out.println("Aplicando el Ordenamiento Bucket : " + Arrays.toString(data));

Resultado: Algoritmo Bucket Sort

Números sin orden: [128, 120, 113, 200, 98, 24, 12, 4, 2, 1]

Aplicando el Ordenamiento Bucket : [1, 2, 4, 12, 24, 98, 113, 120, 128, 200]

4. Algoritmo más adecuado que los algoritmos basados en


comparaciones (estudiados en las lecturas).

Los algoritmos de ordenamiento son procesos que ordenan los elementos de un


arreglo de acuerdo con cierto criterio (llamado relación de orden). Consideramos
que lo más adecuado basados en los estudios de las lecturas sobre:

 Ordenamiento por Selección (Insertion Sort)


 Ordenamiento por Inserción (Insertion Sort)
 Ordenamiento de Burbuja (Bubble Sort)
 Ordenamiento por Mezcla (Merge Sort)
 Ordenamiento Rápido (Quick Sort)
 Ordenamiento Chiflado (Stogee Sort)
Se debe identificar básicamente el escenario adecuado para saber de esta manera
con que algoritmo se debe operar con el fin de optimizar el mejor caso y encontrar
una solución rápida, algo que pudimos evidenciar es: los algoritmos lentos se
comportan en un orden cuadrático, es decir, O(n²), mientras que los algoritmos
rápidos se comportan, en un caso promedio en un orden logarítmico, es decir, O (n
log n). Con esta base podremos tener la idea de que algoritmo será el apropiado.

5. Cuadro comparativo de los tres algoritmos.

ALGORITMOS DE ORDENAMIENTO EN TIEMPO LINEAL

ASPECTOS COUNTING SORT RADIX SORT BUCKET SORT


Este algoritmo es bueno para Es un algoritmo de es principalmente útil
ordenar multi conjuntos clasificación de tiempo cuando la entrada se
1. Maneras de (donde cada elemento puede lineal que ordena en distribuye uniformemente
Comprender ser presente muchas veces), tiempo O (n + k) cuando los en un rango.
pero pobre para diccionarios elementos están en el
no posee la sentencia if rango de 1 a k.
Es un algoritmo de La idea de Ordenar radix es Se trata de una
ordenamiento por cuentas hacer una clasificación generalización del algoritmo
2. Facilidad de son: O (n+k) O (n+k) No dígito por dígito Pigeonhole sort. Cuando los
Implementación comparativo, utiliza el comenzando desde el elementos a ordenar están
diapasón de los números del dígito menos significativo uniformemente distribuidos
array a ordenar (lista) para hasta el dígito más la complejidad
calcular los elementos que significativo. computacional de este
coinciden. algoritmo es de O(n). El
algoritmo contiene los
siguientes pasos: 1. Crear
una colección de casilleros
vacíos2. Colocar cada
elemento a ordenar en un
único casillero 3. Ordenar
individualmente cada
casillero 4. devolver los
elementos de cada casillero
concatenados por orden 5.
Sólo puede ser aplicado en No podemos usar la Requiere más memoria
elementos en un intervalo de ordenación por conteo auxiliar para los cubos a
a lo más k elementos, porque la clasificación por costa del tiempo de
típicamente en números conteo tomará O (n 2 ). ejecución que más géneros
3. Restricciones de naturales en el rango de 1 a k. de comparación. Funciona
datos Su cota de tiempo es de O en O (n + k) O (n + k) tiempo
(n + k), por lo que para ser en el caso promedio donde
mejor que el ordenamiento a n es la cantidad de
base de comparaciones, se elementos que se ordenarán
debe cumplir que k < O. y k es la cantidad de cubos.

No existe un mejor y peor Es rápido a diferencia de Es eficiente y veloz método


caso, todos los casos se tratan otros algoritmos de de ordenamiento interno
4. Eficiencia iguales ordenamiento como:
 Ordenamiento por
Mezcla (Merge Sort)
 Ordenamiento
Rápido (Quick Sort)

5. Memoria O(n+k) O(n) O(n)

6. Nombre Ordenamiento por cuentas Ordenamiento Radix Ordenamiento por casilleros


Traducido
Almacena muchos datos de x  No es eficiente
7. Desventajas memoria cuando la cantidad de
casilleros es mayor a
la cantidad de claves,
tampoco cuando el
rango es desconocido
 El algoritmo no
funciona de manera
correcta cuando las
claves son muy
largas, como el
tiempo de
clasificación total es
proporcional a la
longitud de la clave y
el número de
elementos a ordena.

Referencias:
http://metodosordenamiento.blogspot.com.co/2015/01/metodos-de-ordenamiento.html

https://www.researchgate.net/profile/Jorge_Rios2/publication/277114031_Algoritmo_de_ordena
miento_por_comparaciones_Heapinsert_Sort/links/56f92d9e08ae7c1fda311181/Algoritmo-de-
ordenamiento-por-comparaciones-Heapinsert-Sort.pdf

http://www.olimpiadadeinformatica.org.mx/omi/omi/archivos/apuntes/AnalisisDeComplejidad.ht
m

http://metododeordenacion.blogspot.com.co/p/algoritmo-de-ordenamiento.html

https://sites.google.com/site/algoritmoshellsort/ventajas-y-desventajas

http://www.academia.edu/14702301/Cat%C3%A1logo_de_Algoritmos_Asignatura_An%C3%A1lisi
s_de_Algoritmos

You might also like