0
votes

Ordre inverse du type de bulle d'éléments nuls

J'essaie d'inverser ma bulle Tri afin que tous les éléments NULL soient poussés à la fin du tableau au lieu du début, car ils sont triés maintenant. Tout conseiller sur la manière dont cela peut être atteint? XXX


7 commentaires

Qu'avez-vous déjà essayé?


Il suffit de modifier votre logique de comparaison pour évaluer null supérieur à toute valeur non nulle.


Où est la déclaration de comparaison dans votre boucle intérieure? Ou voulez-vous simplement laisser tomber les valeurs nulelles au fond?


@Tarik oui c'est vrai. Je les veux en bas.


Dans la déclaration et le bloc IF, vous ne devez utiliser que l'index Innerloop. Vous devriez vérifier si les étudiants [innerloop] == null


Faites un tri régulier mais dans la vérification des conditions de comparaison pour NULLS. Si les deux éléments sont des nuls sont des nuls, ils sont égaux, si seulement un NULL, traitez-le comme une plus grande valeur, si les deux ne sont pas des nuls, alors les comparent. Une autre approche pourrait supprimer toutes les valeurs nulles, trier les non-nuls restants et ajouter des nulls au tableau de trieur.


Vous devez utiliser le débogueur fourni par l'IDE pour passer à travers votre code pour déterminer ce qui se passe. Vous avez également besoin de nouveau programmeur pour simuler votre algorithme sur un morceau de papier pour voir si cela fonctionne. BTW, ne désespérez pas ou ne vous décourageez pas. C'est dur au début, mais vous obtiendrez beaucoup de satisfaction lorsque les choses fonctionnent comme la magie :-)


3 Réponses :


1
votes

Il y a une approche plus rapide, plus facile et stable avec O (n) la complexité de temps: xxx

Cependant, si vous insistez sur le tri de la bulle: nous pouvons la mettre en œuvre de manière un peu différente xxx


0 commentaires

1
votes

Code corrigé: xxx pré>

Ceci ne triera pas votre tableau mais déposez uniquement les nulls en bas. P>

En fait, vous pouvez supprimer la variable TEMP: P>

int a = 10;
int b = 2;
(a, b) = (b, a);


1 commentaires

Merci beaucoup! Travaillé bien! C'est assez difficile en tant que débutant d'avoir une adhérence sur des boucles imbriquées, ce qui est si frustrant! Des conseils sur la manière d'améliorer la pensée lors de leur utilisation? J'utilise beaucoup le débogueur et voyez comment les boucles iTerates. Mais lorsque vous les combinez, j'ai tendance à perdre du contexte ...



1
votes

essayer suivant. Vous devez tester pour être extérieur NULL et INTERNE ne sont pas nuls:

            for (int outerLoop = 0; outerLoop < students.Length - 1; outerLoop++)
            {
                for (int innerLoop = outerLoop + 1; innerLoop < students.Length; innerLoop++)
                {
                    if ((students[outerLoop] == null) && (students[innerLoop] != null))
                    {
                        var tempObject = students[outerLoop];
                        students[outerLoop] = students[innerLoop];
                        students[innerLoop] = tempObject;
                    }
                }
            }


0 commentaires