Counting Sort | Ordenamiento por conteo

preview_player
Показать описание
Counting Sort o el Ordenamiento por Cuentas, es un método de ordenamiento donde no aplicamos comparaciones para determinar la posición final de nuestros elementos, en su lugar usamos un arreglo auxiliar donde vamos contando cuántos elementos de cada valor hay y lo usamos para ordenar.

Código:

Contenido:
0:00 Intro
0:46 Idea de Counting Sort
2:22 Ejemplo visual
5:10 Código
6:45 Análisis
8:06 Otros Detalles

Libros recomendados:

Únete como miembro para apoyar al canal y acceder a sus beneficios:

Apóyame con una pizza:

Para contenido atrás de cámara y fotos de comida sígueme en:
Рекомендации по теме
Комментарии
Автор

Justo estoy haciendo un ejercicio sobre este algoritmo y no tiene mucho que acabas de subir la explicación. Gracias master 🤙🏼

JaimeleonM
Автор

Super interesante este canal! Cómo sería si queremos tener claves únicas? Podemos extender el algoritmo para hacer un merge de los duplicados?

jsierra
Автор

(No hate) Porfa haz un video de punteros en C me urge para poder resolver problemas complicados de programación y a casi ningún tutorial le agarro porfa

juanproMC
Автор

Entendi en minutos lo que no entendi en 2 horas de clase, ahora solo me falta saber como se ordena de mayor a menor

marcourielzambranovaldez
Автор

Hola como estas!? vos sabes que quise agregar este video a mi lista de reproduccion de youtube y no me aparece la opcion. por que sera?

Maximiliano.R
Автор

Lo hice para números negativos, pero creo que se puede mejorar



```
import numpy as np


def find_low(x, arr, minim):
if x < minim or x is None:
return None

num = arr.get(x - 1)
if not (num is None):
return x - 1
else:
return find_low(x - 1, arr, minim)

def countingSort(numbers):
minim = min(numbers)
maxim = max(numbers)
ordering = np.zeros(numbers.shape, dtype=int)
print(f' * Numbers : {numbers}')
print(f' * lower : {minim}')
print(f' * upper : {maxim}')

asd = {}
for num in numbers:
asd[num] = asd.get(num, 0) + 1

for num in np.arange(minim + 1, maxim + 1):
up = asd.get(num)
if not up is None:
low = find_low(num, asd, minim)
asd[num] = asd[low] + asd[num]

for num in numbers:
idx = asd[num]
asd[num] -= 1
ordering[idx - 1] = num

return list(ordering)

numbers = np.random.randint(-10, 10, 10)
print(f' * Ordered : {countingSort(numbers)}')
```

kascesar