Implementei primeiro a distribuição dos valores nos buckets:
import numpy as np
class BucketSort():
def __init__(self,array):
self.array = array
def distribution_pass(self):
bucket = np.empty((10,len(self.array)),dtype=int)
bucket[:] = np.nan
#rows =[]
# cols = []
for num in array:
for j in range(bucket.shape[1]):
bucket[num % 10, j] = num
#rows.append(num%10)
#cols.append(j)
break
print()
return bucket
def gathering_pass(self):
array = []
self.bucket = BucketSort.distribution_pass(self)
for i in range(self.bucket.shape[0]):
for j in range(self.bucket.shape[1]):
if not np.isnan(self.bucket[i,j]):
#print(self.bucket[i,j])
array.append(self.bucket[i, j])
return array
def main(array):
bucket = BucketSort(array)
BucketSort.distribution_pass(bucket)
array = BucketSort.gathering_pass(bucket)
return array
array = [97,3,100]
print(main(array))
#bucket = BucketSort(array)
#print(bucket.distribution_pass())
#print(bucket.gathering_pass())
Input: [97,3,100]
Output: [100,3,97]
PS: Faltam alguns passos para terminar a ordenação!
Está funcionando. Se eu tirar o
break
cada valor do array será copiado várias vezes. Alguma maneira melhor de fazer distribuição dos valores nos buckets sem o break?
Um problema adicional na minha implementacao: todos os valores com exceção dos que vieram do array são zero. Eu gostaria mesmo é de ter criado um array APENAS com esses valores e as outras posições VAZIAS? Qualquer outro valor em bucket, vai me atrapalhar no restante da implementação... Como fazer?