Documentos de Académico
Documentos de Profesional
Documentos de Cultura
19 de septiembre de 2020
1. Definición
1.1. ¿QUE ES?
Es un algoritmo de ordenamiento en el que se cuenta el número de ele-
mentos de cada clase para luego ordenarlos. Solo puede ser utilizados por
tanto para ordenar elementos que sea contables.
2. Detallando el algoritmo
El ordenamiento de conteo asume que cada uno de los n elementos de
entrada es un número entero en el rango 0 a k, para algún número entero k.
Cuando k = O(n), la clasificación se ejecuta en Θ(n) tiempo. El ordenamiento
por recuento determina, para cada elemento de entrada x, el número de
elementos menos que x. Utiliza esta información para colocar el elemento
x directamente en su posición en el matriz de salida. Por ejemplo, si 17
elementos son menores que x, entonces x pertenece a la salida posición 18.
Debemos modificar este esquema ligeramente para manejar la situación en
la que varios elementos tienen el mismo valor, ya que no queremos ponerlos
todos en la misma posición. En el código para contar ordenación, asumimos
que la entrada es una matriz A[1..n], y ası́ A. longitud = n. Necesitamos otras
dos matrices: la matriz B[1 . . n] contiene la salida ordenada, y la matriz C
[0. . k] proporciona almacenamiento de trabajo temporal.
1
3. Algoritmo
Counting Sort (A,B,K)
for i − > C[0 . . K] un nuevo array
se usa la tabla de array para buscar los digitos
Datos de entrada:
0 1 2 3 4 5 6 7
2 5 3 0 2 3 0 3
cuenta Matriz
0 2 3 5
2 2 3 1
0 1 2 3 4 5 6 7
0 0 1 2 2 3 3 3
4. Rastreo
COUNTING SORT (A,B,K)
2. for i = 0 to K
3. C[i] = 0
4. for j = 1 to A.length
2
5. C[A[j]] = C[A[j]] + 1
6. C[i] now contains the number of elements equal to i .
7. for i = 1 to k
8. C[i] = C[i] + C [i - 1]
9. C[i] now contains the number of elements less than or equal to i .
10. for j = A.length downto 1
11. B[C[A[j]]] = A[i]
12. C[A[j]] = C[A[j]] - 1
0 1 2 3 4 5 6 7
0 0 1 2 2 3 3 3
cuenta Matriz
0 2 3 5
2 2 3 1
for i = 0 to 3 - 1 do
m = 100+1 = 10
p = 100 = 1
for j = 0 to (7 - 1) do
temp = A[0] mod 10 = 9
index = temp/1 = 9
pocket[9].append(A[0])
for j = 1 to (7 - 1) do
temp = A[1] mod 10 = 7
index = temp/1 = 7
pocket[7].append(A[1])
for j = 2 to (7 - 1) do
3
temp = A[2] mod 10 = 7
index = temp/1 = 7
pocket[7].append(A[2])
for j = 3 to (7 - 1) do
temp = A[3] mod 10 = 9
index = temp/1 = 9
pocket[9].append(A[3])
for j = 4 to (7 - 1) do
temp = A[4] mod 10 = 6
index = temp/1 = 6
pocket[6].append(A[4])
for j = 5 to (7 - 1) do
temp = A[5] mod 10 = 0
index = temp/1 = 0
pocket[0].append(A[5])
for j = 6 to (7 - 1) do
temp = A[6] mod 10 = 5
index = temp/1 = 5
pocket[5].append(A[6])
count = 0
for j = 0 to 10 do
4
done
done
for j = 2 to 10 do
while pocket[2] is not empty − > false
done
done
for j = 3 to 10 do
while pocket[3] is not empty − > false
done
done
for j = 4 to 10 do
while pocket[4] is not empty − > false
done
done
for j = 5 to 10 do
while pocket[5] is not empty − > true
A[1] = get first node of pocket[5] and delete it
count = count + 1
while pocket[5] is not empty − > false
done
done
for j = 6 to 10 do
while pocket[6] is not empty − > true
A[2] = get first node of pocket[6] and delete it
count = count + 1
while pocket[6] is not empty − > false
done
done
for j = 7 to 10 do
while pocket[7] is not empty − > true
A[3] = get first node of pocket[7] and delete it
count = count + 1
while pocket[7] is not empty − > true
A[4] = get first node of pocket[7] and delete it
count = count + 1
while pocket[7] is not empty − > false
done
done
5
for j = 8 to 10 do
while pocket[8] is not empty − > false
done
done
for j = 9 to 10 do
while pocket[9] is not empty − > true
A[5] = get first node of pocket[7] and delete it
count = count + 1
while pocket[9] is not empty − > true
A[6] = get first node of pocket[9] and delete it
count = count + 1
while pocket[9] is not empty − > false
done
done
for j = 10 to 10 do
while pocket[8] is not empty − > false
done
done
Array:
0 1 2 3 4 5 6
720 355 436 457 657 329 839
for i = 1 to 3 - 1 do
m = 101+1 = 102 = 100
p = 101 = 10
for j = 0 to (7 - 1) do
temp = A[0] mod 100 = 20
index = temp/10 = 2
pocket[2].append(A[0])
for j = 1 to (7 - 1) do
temp = A[1] mod 100 = 55
index = temp/10 = 5
pocket[5].append(A[1])
6
for j = 2 to (7 - 1) do
temp = A[2] mod 100 = 36
index = temp/10 = 3
pocket[3].append(A[2])
for j = 3 to (7 - 1) do
temp = A[3] mod 100 = 57
index = temp/10 = 5
pocket[5].append(A[3])
for j = 4 to (7 - 1) do
temp = A[4] mod 100 = 57
index = temp/10 = 5
pocket[5].append(A[4])
for j = 5 to (7 - 1) do
temp = A[5] mod 100 = 29
index = temp/10 = 2
pocket[2].append(A[5])
for j = 6 to (7 - 1) do
temp = A[6] mod 100 = 39
index = temp/10 = 3
pocket[3].append(A[6])
Lista pocket:
0 1 2 3 4 5 6 7 8 9
720 436 355
329 839 457
657
Array:
count = 0
for j = 0 to 10 do
7
0 1 2 3 4 5 6
720 329 436 839 355 457 657
8
count = count + 1
while pocket[5] is not empty − > true
A[5] = get first node of pocket[5] and delete it
count = count + 1
while pocket[5] is not empty − > true
A[6] = get first node of pocket[5] and delete it
count = count + 1
while pocket[5] is not empty − > false
done
done
for j = 6 to 10 do
while pocket[6] is not empty − > false
done
done
for j = 7 to 10 do
while pocket[7] is not empty − > false
done
done
for j = 8 to 10 do
while pocket[8] is not empty − > false
done
done
for j = 9 to 10 do
while pocket[9] is not empty − > false
done
done
for j = 10 to 10 do
while pocket[10] is not empty − > false
done
done
Lista pocket:
0 1 2 3 4 5 6 7 8 9
329 436 657 720 839
355 457
Array:
9
0 1 2 3 4 5 6
329 355 436 457 657 720 839
for i = 2 to 3 - 1 do
m = 102+1 = 103 = 1000
p = 102 = 100
for j = 0 to (7 - 1) do
temp = A[0] mod 1000 = 720
index = temp/100 = 7
pocket[7].append(A[0])
for j = 1 to (7 - 1) do
temp = A[1] mod 1000 = 329
index = temp/100 = 3
pocket[3].append(A[1])
for j = 2 to (7 - 1) do
temp = A[2] mod 1000 = 436
index = temp/100 = 4
pocket[4].append(A[2])
for j = 3 to (7 - 1) do
temp = A[3] mod 1000 = 839
index = temp/100 = 8
pocket[8].append(A[3])
for j = 4 to (7 - 1) do
temp = A[4] mod 1000 = 355
index = temp/100 = 3
pocket[3].append(A[4])
for j = 5 to (7 - 1) do
temp = A[5] mod 1000 = 457
index = temp/100 = 4
pocket[4].append(A[5])
10
for j = 6 to (7 - 1) do
temp = A[6] mod 1000 = 657
index = temp/100 = 6
pocket[6].append(A[6])
count = 0
for j = 0 to 10 do
while pocket[0] is not empty − > false
done
done
for j = 1 to 10 do
while pocket[1] is not empty − > false
done
done
for j = 2 to 10 do
while pocket[2] is not empty − > false
done
done
for j = 3 to 10 do
while pocket[3] is not empty − > true
A[0] = get first node of pocket[3] and delete it
count = count + 1
while pocket[3] is not empty − > true
A[1] = get first node of pocket[3] and delete it
count = count + 1
while pocket[3] is not empty − > false
done
done
for j = 4 to 10 do
while pocket[4] is not empty − > true
A[2] = get first node of pocket[4] and delete it
count = count + 1
while pocket[4] is not empty − > true
A[3] = get first node of pocket[4] and delete it
count = count + 1
11
while pocket[4] is not empty − > false
done
done
for j = 5 to 10 do
while pocket[5] is not empty − > false
done
done
for j = 6 to 10 do
while pocket[6] is not empty − > true
A[4] = get first node of pocket[6] and delete it
count = count + 1
while pocket[6] is not empty − > false
done
done
for j = 7 to 10 do
while pocket[7] is not empty − > true
A[5] = get first node of pocket[7] and delete it
count = count + 1
while pocket[7] is not empty − > false
done
done
for j = 8 to 10 do
while pocket[8] is not empty − > true
A[6] = get first node of pocket[8] and delete it
count = count + 1
while pocket[8] is not empty − > false
done
done
for j = 9 to 10 do
while pocket[9] is not empty − > false
done
done
for j = 10 to 10 do
while pocket[10] is not empty − > false
done
done
12
for i = 3 to 3 - 1 do − > false
13