0
votes

Qu'est-ce qui ne va pas dans mon tri Bubble à l'aide d'arraylist?

Qu'est-ce qui ne va pas dans ma bulle Tri dans ArrayList? Il n'a pas été trié. Je suis un débutant.

public static ArrayList < Integer > bubbleSort(ArrayList < Integer > ar) {

    for (int i = 0; i < ar.size() - 1; i++) {
        int indexMax = i;
        for (int j = 1; j < ar.size(); j++) {
            if (ar.get(indexMax) > ar.get(j)) {
                indexMax = j;
            }
        }
        if (indexMax != i) {
            int temp = ar.get(i);
            ar.set(i, ar.get(indexMax));
            ar.set(indexMax, temp);
        }
    }
    return ar;

}


6 commentaires

Comme vous utilisez ArrayList, vous pouvez également utiliser des méthodes de collecte pour trier votre entier ascendant ainsi que décroissant.


Bienvenue à! Tout d'abord, vous devriez apprendre à formater votre code, il le rendra plus lisible. Par conséquent, nous pourrons vous aider plus vite. La tri de bulles est un algorithme classique, vous pouvez donc trouver beaucoup d'exemples et comparer votre solution avec eux. Quoi qu'il en soit, j'ai posté une réponse que j'ai testée. J'ai aussi noté certaines de vos erreurs


@Kandy, je pense qu'il pratique et que sa tâche étage de mettre en œuvre Bubble Trier.


@Steyrix peut être en train d'apprendre que je n'envoie que des approches qu'il peut essayer d'atteindre cet objectif. Cela le fera savoir sur le cadre de collecte s'il est débutant qui peut être utile pour lui ainsi que d'autres débutants qui visitent ce poste.


@Steyrix Quel est le format dans votre code? Obtenez-moi plus d'informations s'il vous plaît.


@hadirezaee vos crochets carrés ont été positionnés de mauvaise manière et les retenus n'étaient pas corrects. Cependant, certaines personnes ont édité votre message et maintenant le code a l'air bien


4 Réponses :


1
votes

Êtes-vous sûr que vous devriez commencer à partir du 2e élément (j = 1) code> à chaque fois? Essayez j = i code>. I.e.,

public static ArrayList<Integer> bubbleSort (ArrayList<Integer> ar) {
    for (int i = 0; i < ar.size() - 1; i++) {
        int indexMax = i;            
        for (int j = i; j < ar.size(); j++) {
            if (ar.get(indexMax) > ar.get(j)) {
                indexMax = j;
            }
        }
        if (indexMax != i) {
            int temp = ar.get(i);
            ar.set(i, ar.get(indexMax));
            ar.set(indexMax, temp);
        }
    }
    return ar;
}


4 commentaires

S'il vous plaît n'encouragez pas l'indentation de code médiocre. Formatez votre code correctement avant de poster une réponse


Il ne triera pas dans l'ordre décroissant, car l'ordre de progression est de la manière opposée que le tri traditionnel de la bulle, mais il cherche également la valeur minimale (contrairement à ce que dit le nom de la variable). Cette mise en œuvre fonctionne toutefois, il est écrit très confusement. Son mécanisme est dans l'esprit de tri de bulles.


@HADIREZAEE Je regarderais la page Wiki du tri des bulles, il y a des animations qui devraient vous montrer comment la sorte de bulle est censée fonctionner. :) Peut-être que cela vous aide à tirer une implémentation plus propre.


@brimborium j'ai regardé la page wiki et c'était très utile merci



0
votes

Votre bloc de code d'échange ressemblait à c'était en dehors de la boucle, de sorte que le seul échange a eu lieu pour une itération de la boucle principale. Vous faites également une comparaison inutile des éléments, démarrant votre boucle interne avec préconditionnement j = 1 code>. Vous devez commencer à partir de i code>, comme après quelques itérations de la plage de boucle extérieure de 0 à i code> sera déjà triée.

Je pense que vous pouvez utiliser une approche plus simple. P>

for (int i = 0; i < ar.size() - 1; i++) {
    for (int j = i; j < ar.size(); j++) {
        if (ar.get(j) < ar.get(i)) {
            Integer temp = ar.get(j);
            ar.set(j, ar.get(i));
            ar.set(i, temp);       
        }
    }
}


0 commentaires

0
votes

Vous pouvez faire le tri comme celui-ci:

for(int out=inputArray.size()-1; out>0; out--){
    for(int j=1; j<=out; j++){
      if(inputArray[j-1]<inputArray[j]){
         //Swap the elements
         int temp = inputArray[j];
         inputArray[j]=inputArray[j-1];
         inputArray[j-1]=temp;
       }
     }
 }
return inputArray;


1 commentaires

Il utilise ArrayList , pas un tableau. Donc, votre réponse ne peut pas être très claire pour op, puisqu'il est débutant



0
votes

Pouvez-vous essayer cela? XXX


0 commentaires