Partage
  • Partager sur Facebook
  • Partager sur Twitter

[java] tri d'une liste recursive

    23 mars 2007 à 17:54:19

    Bonjour

    je suis face a un petit probleme:
    je voudrai trié une liste definie telque:

    static class Echiquier {
        Chainon premier;
        Chainon suivant;
       
        static class Chainon {
          int ligne;
          int colonne;
          Chainon suivant;
          }


    j ai ma liste premier et j voudrai la trier en fronction des X puis des Y

    j ai crée une nouvelle liste qui sera la liste trié mais je ne voi pas trop comment fair. pouvez vous m'aider?

    merci d'avance

    T.
    • Partager sur Facebook
    • Partager sur Twitter
      23 mars 2007 à 18:16:46

      oui j y ai deja pensé mais je n'arrive pas a "tourné" ca en java

      sinon je voi bien le truc:

      prendre le 1er element de la liste a trier
      l inser dans la nouvelle liste en tete et en queul pas pas de pb mais lorsque c'est entre 2 element je n'y arrive pas
      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2007 à 1:32:48

        Je ne sais pas si ça pourrait t'aider, mais j'ai une classe de tri de array d'integer TRÈS vite ^^

        au pire, il y a un exemple de tri insertion, mentionné plus haut...

        /*
                * Le plus rapide tri que j'ai vue jusqu'ici...
                * un quicksort amélioré avec trimedian et insertionsort.
                */

               
                public class SortingAlgo {
                        /*
                        * seul méthodes utilisable par l'utilisateur de la classe.
                        */

                        public static int[] quickSort(int[] items) {
                                time = System.nanoTime();
                                items = quickSort(items, 0, items.length-1);
                                items = insertionSort(items,0,items.length-1);
                                time = System.nanoTime() - time;
                                return items;
                }
                   
                   public static int nanoTimeTaken() {
                           return (int)time;
                        }
                   
                        /**********************************************************************/
                        private static int[] quickSort(int[] a,int l,int r) {
                                int M = 4;
                      int i;
                      int j;
                      int v;
               
                      if ((r-l)>M) {
                          i = (r+l)/2;
                          if (a[l]>a[i]) swap(a,l,i);     // Tri-Median Methode!
                          if (a[l]>a[r]) swap(a,l,r);
                          if (a[i]>a[r]) swap(a,i,r);
               
                          j = r-1;
                          swap(a,i,j);
                          i = l;
                          v = a[j];
                          for(;;) {
                         while(a[++i]<v);
                         while(a[--j]>v);
                         if (j<i) break;
                         swap (a,i,j);
                          }
                          swap(a,i,r-1);
                          quickSort(a,l,j);
                          quickSort(a,i+1,r);
                      }
                      return a;
                   }
                   private static int[] swap(int a[], int i, int j) {
                  int T;
                  T = a[i];
                  a[i] = a[j];
                  a[j] = T;
                  return a;
                }
                        private static int[] insertionSort(int a[], int lo0, int hi0) {
                  int i;
                  int j;
                  int v;
                  for (i=lo0+1;i<=hi0;i++){
                       v = a[i];
                       j=i;
                       while ((j>lo0) && (a[j-1]>v)){
                            a[j] = a[j-1];
                            j--;
                       }
                       a[j] = v;
                  }
                  return a;
                   }
                   private static long time = 0;
                 }
        • Partager sur Facebook
        • Partager sur Twitter
        Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
          24 mars 2007 à 10:34:43

          merci de ton aide avecc un tableau se serai telement plus simple ^^
          je probleme c'est que le suis contrain d'utilisé un model de liste chainé, je n'est acces qu'a la tete de la liste donc le tris doi etre recursif. et c'est la ou je n'y arrive pas
          • Partager sur Facebook
          • Partager sur Twitter
            24 mars 2007 à 19:24:28

            Citation

            merci de ton aide avecc un tableau se serai telement plus simple ^^


            Bof, j'ai rarement vu plus élégant que le tri par insertion d'une liste personellement. (vu ce que tu nous demandes, il n'y a pas trop de contraintes de performances donc on peut prendre un tri quadratique)
            • Partager sur Facebook
            • Partager sur Twitter

            [java] tri d'une liste recursive

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown