2016-03-27 2 views
0

Je travaille sur une affectation où nous devons prendre un tableau d'entiers et le trier en utilisant un tri par seau.Java 2d array and Bucket sort

Mon problème survient lorsque j'essaie de passer à la colonne suivante, mais seulement s'il y a déjà un élément dans le "bucket". Donc, en utilisant mon tableau ci-dessous, 22 est le premier élément et ira dans la ligne 2 colonne 0, ce qui est correct, mais en utilisant i comme la colonne est évidemment incorrecte car elle augmente toujours la colonne et je reçois finalement index hors limites.

Je ne peux pas comprendre comment augmenter correctement l'index de la colonne bucketArray, seulement s'il y a un élément dans cette position. J'ai essayé d'utiliser une boucle supplémentaire pour gérer la colonne, mais cela n'a pas fonctionné non plus.

Tout pointeur dans la bonne direction serait grandement apprécié! Je suis sûr qu'il existe également d'autres façons de créer un tri de seau, mais l'affectation dit d'utiliser un tableau 2d pour chaque compartiment, donc j'essayais de le faire fonctionner de cette façon.

public class BucketSort { 

    public static void main(String args[]) { 
     int intArray[] = {22, 45, 12, 8, 10, 6, 72, 81, 33, 18, 50, 14}; 
     int eachBucket[][] = new int[10][11]; 
     int j; 
     double max = 81; 
     int min = 6; 
     int divider = (int)Math.ceil((max + 1)/10); 

     for(int i = 0; i < intArray.length; i++) { 
      j = (int)Math.floor(intArray[i]/divider); 
      eachBucket[j][i] = intArray[i]; 
     } 
    } 
} 

Répondre

1

Utilisez le 11e élément pour le suivi du nombre d'éléments dans le seau en cours ont été utilisés, quelque chose comme ça

for(int i = 0; i < intArray.length; i++) { 
     j = (int)Math.floor(intArray[i]/divider); 
     eachBucket[j][eachBucket[j][10]] = intArray[i]; 
     eachBucket[j][10]++; 
    } 

Le problème avec une deuxième dimension de taille fixe est si vous avez plus que n éléments à mettre dans un seul seau. Probablement pas un problème ici.

+0

Non, ce n'est pas un problème dans ce cas. Je dois dire que je me sens un peu stupide mais je ne comprends pas vraiment comment cela fonctionne. Prenons le tout premier nombre (22), ça va aller dans la ligne 2 (j), mais qu'est-ce que exactement column eachBucket [j] [10]? S'il vous plaît gardez à l'esprit que je suis nouveau à la programmation haha. – NoobCoderChick

+0

Oh je vois! eachBucket [j] [10] = 0, alors vous ajoutez 1 chaque fois à cela! Brilliant – NoobCoderChick

+0

Est-ce une bonne façon de faire quelque chose comme ça? Pour cette situation particulière. Aussi, si je sais que les éléments max par ligne peuvent être 11, devrais-je créer une colonne supplémentaire juste pour garder une trace du nombre? Est-ce que vous avez déjà fait face à une situation comme celle-ci ou est-ce que vous en êtes arrivé là-haut? C'est-à-dire, est-ce que je devrais me donner des coups de pied pour ne pas penser de cette façon ou alors que vous programmez et obtenez de l'expérience, devenez-vous mieux à résoudre des problèmes comme celui-ci? – NoobCoderChick