You are on page 1of 9

UNIVERSIDAD NACIONAL MICAELA

BASTIDAS DE APURIMAC

ESCUELA PROFESIONAL
DE INGENIERIA
DE INFORMATICA Y SISTEMAS

ASIGNATURA: Algorítmica ll

DOCENTE: ING.FRANCISCO CARI INCAHUANACO

TEMA: Método de Ordenamiento Counting Short

INTEGRANTES:
Este trabajo es dedicado
a mi grupo por esforzarse ,poner
empeño en este proyecto.
INDICE

1. Introducción……………………………………Pag. 4

2. Historia………………………………………….Pag. 5

3. Marco Teórico…………………………………Pag. 5

3.1 Tipos de ordenamientos……………Pag. 4

4.Metodo de Ordenamiento Counting Short………Pag. 5

5. Pseudocódigo………………………………………...pag6

6.codigo en c++………………………………………….pag7

7.bibliografia.- …………………………………...............Pag. 9
METODO DE ORDENAMIENTO POR CUENTAS

(COUNTING SORT)
Introducción:
El algoritmo de ordenamiento Counting Sort (Ordenamiento por Cuentas en
español) es un algoritmo de ordenamiento en el que se cuenta el número de
elementos de cada clase para luego ordenarlos. Sólo puede ser utilizado por tanto
para ordenar elementos que sean contables, por ejemplo, los números enteros de
un determinado intervalo, sin contar números reales.El algoritmo fue creado por
Harold H. Seward en 1954.

El algoritmo es muy interesante por que no necesita ningún uso de una condición
a excepción de los bucles, tiene un mejor funcionamiento con una lista larga, de
un solo elemento simple (no hay estructuras),y de números repetitivos .
Es mejor que los numero no se separen entre si ,un ejemplo seria el valor máximo
sea de 15 y el mínimo de uno, aunque tengamos 10mil entradas (o elementos), la
desventaja de este algoritmo es la necesidad de almacenar muchos datos de
memoria.

Tipos de ordenamientos:

Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los

Externos.

-Los internos:

Son aquellos en los que los valores a ordenar están en memoria principal,
por lo que se asume que el tiempo que se requiere para acceder cualquier
elemento sea el mismo (a[1], a[300], etc.).

-Los externos:

Son aquellos en los que los valores a ordenar están en memoria secundaria
(disco, cinta, cilindro magnético, etc.), por lo que se asume que el tiempo
que se requiere para acceder a cualquier elemento depende de la última
posición accesada (posición 1, posición 300, etc.).
Counting sort:
1: Análisis.-
Paso 1: consiste en averiguar cuál es el intervalo en que se encuentran los datos
a ordenar valores mínimo y máximo.
Paso 2: luego creamos un vector de números enteros tantos como valores haya
en el intervalo (mínimo, máximo) y cada elemento se le da un valor de cero (0).
Paso 3: tras esto se recorren todos los elementos a ordenar y se cuenta el número
de apariciones de cada elemento (usando el vector que hemos creado).
Paso 4: por ultimo basta con recorrer este vector para tener todos los elementos
ordenados.
-consideremos el siguiente ejemplo:
Lista a ordenar: 2 5 3 2 8 5 3 2
1.-buscar el mínimo y el máximo:
Mínimo=2
Máximo=8

2.-creamos un vector auxiliar :


Auxiliar=vector[2…8] que pertenecen alos enteros.

3.-Recorrer la lista de elementos y contar los elementos:


Al final, Auxiliar= [3, 2,0,2,0,0,1]
Auxiliar [2] =3 por que el valor 2 aparece 3 veces.
Auxiliar [7] = 0 por que el valor 7 no aparece en la anterior secuencia.

4.- * Recorriendo el vector auxiliar obtenemos la lista de números ordenada

Lista ordenada = 2 ,2 ,2 ,3 ,3 ,5 ,5 ,8

Un modo de hacer este algoritmo más práctico, es guardar varios elementos en un


índice de la matriz, pero en este caso la matriz ya no es de valores enteros sino
que contiene algún tipo de estructura de datos. Así es posible por ejemplo ordenar
números con decimales.
Por ejemplo si en la matriz auxiliar en el índice 5, metemos todas las apariciones
de la lista cuyo valor está en el rango 5.0 - 5.99. Luego con cada elemento en
cada índice se realiza un nuevo ordenamiento. cuando se usan este tipo de
técnicas, el algoritmo ya se considera otro, denominado: bucketsort.
Tiempo total: Σ O(n+k)

VENTAJAS:
-El algoritmo tiene una complejidad de O(N+k), siendo “n” el número de elementos
a ordenar y “k” el tamaño del vector auxiliar (Max-min).
-La eficiencia del algoritmo esta entre el mejor y peor caso.

DESVENTAJAS:
-El algoritmo como y ya sabemos no requiere de un condicional (if), pero requiere
de una memoria adicional .
- lento.
-solo ordena números enteros.
-mayormente se usa en arreglos en los q los números se repiten.
2.-Pseudocódigo:
Inicio
Variables(A[15],B[15 ],C[100],j,k,n,i)
//ingresamos la dimensión
leer dimension:n
Hacer para i=1 hasta n
Leer A[i]
si(A[i] > k)
k = A[i];
finsi
me=A[i]
finhacer
hacer para i=1 hasta n
si(me>A[i])
me=A[i];
finsi
finhacer
hacer para i=me hasta k
C[i]=0
finhacer

hacer para j=1 hasta n


C[A[j]]=C[A[j]]+1
finhacer

hacer para j=me hasta k


C[i+1] = C[i+1] + C[i];
Finhacer
hacer para j=n hasta 1
B[C[A[j]]] = A[j];
C[A[j]] = C[A[j]] - 1;
finhacer
escribir(“los elementos son:”)
hacer para i=1 hasta n
escribir(B[i])
finhacer

3.código en c++
#include <iostream>
#include <conio.h>
using namespace std;
main()
{
int n,k = 0, A[15],me,total;
int i, j;
int B[15], C[100];
cout << "ingrese la cantidad d elementos : ";
cin >> n;
cout << "\ningrese los elementos :\n";
for ( int i = 1; i <= n; i++)
{
cin >> A[i];
if(A[i] > k)
{
k = A[i];
}
me=A[i];
}
for ( int i = 1; i <= n; i++)
{
if(me>A[i])
{
me=A[i];
}
}
for(i = me; i <= k; i++)
C[i] = 0;
for(j =1; j<=n; j++)
{C[A[j]] = C[A[j]] + 1;}

for(i =me; i<= k; i++)


C[i+1] = C[i+1] + C[i];
for(j = n; j >= 1; j--)
{
B[C[A[j]]] = A[j];
C[A[j]] = C[A[j]] - 1;
}
cout << "\nlos elementos son : ";
for(i = 1; i <= n; i++)
cout << B[i] << " " ;
getch();
}

Bibliografía:
BIBLIOGRAFIA
http://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento

http://books.google.com.co/books?id=NLngYyWFl_YC&pg=PA168&lpg=PA168&d
q=counting+sort+cormen&source=bl&ots=BwVsEE-

http://www.ritmodominicano.com/wiki.php?title=Discusi%C3%B3n:Algoritmo_de_or
denamiento

You might also like