2016-04-23 2 views
2

Pour une affectation, je dois créer une méthode qui implémente le tri de seau sur un tableau de taille 25 rempli d'entiers aléatoires entre 0 et 25 (inclus) et je dois utiliser le utilisez la valeur max en tant que paramètre pour la méthode. Max est le plus grand élément du tableau (dans mon code son 25). Ensuite, je dois créer une autre méthode qui implémente le tri par seau sur le même tableau mais maintenant il est rempli avec des entiers aléatoires entre -25 et 25 (inclus) mais dans cette méthode je dois utiliser une valeur max et une valeur min La valeur max est la même mais min est la plus petite valeur du tableau (dans mon code son -25). J'ai terminé la première partie mais j'ai du mal à trouver comment changer ma première méthode pour compléter la deuxième partie. Voici ma première méthode:Seau Trier avec une valeur max et min

public static void sort(int[] arr, int max) 
{ 
    int min = 0; 
    int [] bucket=new int[max+1]; 
    for (int i=0; i< max; i++) { 
    bucket[arr[i]]++;; 
    } 
    for (int i=0; i<bucket.length; i++) { 
    for (int j=0; j<bucket[i]; j++) { 
     arr[min++]=i; 
    } 
    } 
} 
+0

Il vous suffit de créer des compartiments pour maintenir les valeurs de min à max. Par exemple, si min est -25 et max est 25, alors vous devez créer 50 seaux. Si min est -4 et max est 25 alors vous devez créer 29 godets. Donc, je voudrais changer votre code pour générer les seaux et aussi un peu de la logique interne pour peupler les seaux. – Madhusudhan

+0

Im essayant de comprendre ce que je fais au sujet des nombres négatifs mais je ne suis pas sûr de savoir comment gérer leur index –

+0

J'ai posté le code dans la réponse. – Madhusudhan

Répondre

2

Il vous suffit de créer des compartiments pour maintenir les valeurs de min à max. Par exemple si min est -25 et max est 25, alors vous devez créer 51 godets. Si min est -4 et max est 25 alors vous devez créer 30 godets. Donc, je voudrais changer votre code pour générer les seaux et aussi un peu de la logique interne pour peupler les seaux. Voici comment vous pouvez le faire:

public static void sort(int[] arr, int min, int max) 
{ 
    int nBuckets = max - min + 1; 
    int [] bucket=new int[nBuckets]; 
    for (int i=0; i< arr.length; i++) { 
     bucket[arr[i] - min]++; 

    } 
    int index = 0; 
    for (int i=0; i<bucket.length; i++) { 
     for (int j =0; j<bucket[i]; j++) { 
      arr[index++]=min; 
     } 
     min++; 
    } 
}