Java - cette méthode de tri est un mystère


Je suis coincé avec le code suivant, il devrait insérer une combinaison clé/pointeur dans un nœud d'une structure de données et le garder dans un ordre trié, mais l'ordre semble aléatoire et je ne peux pas comprendre ce qui ne va pas!

public void add (int val, Node no) {
    // Find the index where to insert
    int maxval = 0;
    for (int o = 0; o < this.values.length; o++)
        if (val < this.values[o]) {
            maxval = o;
            break;
        }
    // Move all the data from the chosen index one spot forward
    for (int o = this.values.length-1; o > maxval; o--) {
        this.values[o] = this.values[o-1];
        this.children[o] = this.children[o-1];
    }
    // Insert the value
    this.children[maxval] = no;
    this.values[maxval] = val;
}
Author: taiu, 2011-05-20

1 answers

Bien un problème, c'est que si val est supérieure à tous les les valeurs actuelles, vous vous retrouvez avec maxval = 0. Vous pouvez résoudre ce problème en initialisant maxval à values.length - 1 pour commencer, peut-être...

Un autre problème est que vous perdez effectivement la valeur d'origine de values[values.length - 1] - elle est écrasée avec la valeur précédente, mais rien ne copie cette valeur ailleurs. Quel est le comportement souhaité ici?

 4
Author: Jon Skeet, 2011-05-20 11:45:57