0
votes

impossible d'obtenir le tableau trié

impossible d'identifier mon erreur, vérifié beaucoup de pls le traversent, il ne produit pas la sortie correcte, le code est une implémentation de tri rapide via java. ce code produit la même sortie que l'entrée, car je suis nouveau dans java et les algorithmes, je ne suis pas en mesure de le comprendre.

class Codechef
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int a[]=new int[5];
        Scanner s=new Scanner(System.in);

        for(int i=0;i<5;i++)
            a[i]=s.nextInt();

        quick(a,0,4);

        for(int i=0;i<5;i++)
            System.out.print(a[i]+" ");
    }

    public static void quick(int a[],int s,int l)
    {
        if(s<l)
        {
            System.out.println("in quick");

            int pi=part(a,s,l);

            quick(a,s,pi-1);
            quick(a,pi+1,l);

        }
    }

    public static int part(int a[],int s,int l)
    {
        System.out.println("in part");
        int pivot=a[l];
        int pin=s;

        for(int i=s;i<l;i++)
        {
            if(a[i]<=pivot)
            {
                swap(a[i],a[pin]);
                pin++;
            }
        }

        swap(a[pin],a[l]);
        System.out.println(pin);

        return pin;     
    }

    public static void swap(int a,int b)
    {
        System.out.println("in swap");
        int t;
        t=a;
        a=b;
        b=t;
    }
}


0 commentaires

3 Réponses :


2
votes

Votre fonction d'échange ne fonctionne pas , c'est pourquoi quick laisse votre baie intacte.

Cela résout exactement votre problème: Java: pourquoi cette méthode d'échange ne fonctionne-t-elle pas? - ce sont des concepts fondamentaux et il est plus que rentable de les comprendre.

Quoi qu'il en soit, puisque vous travaillez sur un tableau, vous pouvez procéder comme suit:

/** Swap array[i] and array[j] */
public static void swap(int[] array, int i, int j)
{
    int t = array[i];
    array[i] = array[j];
    array[j] = t;
}

Remarque: je n'ai pas exploré la logique de votre tri - vous pourrez peut-être le comprendre une fois que cela sera corrigé.


1 commentaires

lorsque je remplace simplement mon appel de fonction par le code, cela fonctionne parfaitement, mais lorsque je passe le tableau à la fonction d'échange comme vous l'avez mentionné, cela génère en quelque sorte une exception d'index de tableau hors limites.



1
votes

Vous n'échangez pas réellement des éléments de tableau lors de l'appel de swap. Tout ce que la méthode fait, c'est échanger les paramètres.

Vous pouvez soit passer le tableau dans la méthode d'échange avec les indices, soit plus pratiquement, copier simplement votre code d'échange dans votre méthode part


0 commentaires

0
votes

Je ne sais pas si vous apprenez QuickSort, mais si vous voulez un moyen rapide de trier une liste de nombres, je vous suggère d'utiliser une ArrayList, qui est essentiellement déclarée comme ceci:

ArrayList<Integer> yourArrayList = new ArrayList<Integer>();

Parmi l'opérateur losange (<>) insérez le type de données, dans ce cas est Integer , mais vous pouvez également insérer Double , pour obtenir un résultat décimal.

Après l'avoir déclaré, vous devez ajouter vos numéros:

   ArrayList<Integer> yourArrayList = new ArrayList<Integer>();
 
   yourArrayList.add(10);
   yourArrayList.add(3);
   yourArrayList.add(7);
   yourArrayList.add(-3);
   
   Collections.sort(yourArrayList);
   System.out.println(yourArrayList);

etc...

Lorsque vous avez terminé, utilisez Collections.sort (yourArrayList);

J'espère avoir été clair, voici le code pour l'utiliser:

yourArrayList.add(1)
 yourArrayList.add(3);


0 commentaires