Java quicksort: variable expected [Résolu]

Signaler
Messages postés
184
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
5 mai 2021
-
Messages postés
184
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
5 mai 2021
-
Bonjour, j'essaie de coder quicksort en java. Cependant, j'ai l'erreur suivante: "variable expected", aux lignes:
- 20 avec sequence.get(i)
- 21 (j)
- 26 (i+1)
- 27 (d).
Je ne comprends pas, étant donné que les variables sont bien déclarées.

Voilà le code:
package com.company;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;

public class Quicksort {

    public static int partition(ArrayList<Integer> sequence, int g, int d){

        int pivot = sequence.get(d);
        int i = g-1;

        for (int j = g; j<d; j++){

            if (sequence.get(j)<=pivot){
                i++;

                int temp = sequence.get(i);
                sequence.get(i) = sequence.get(j);
                sequence.get(j) = temp;
            }
        }

        int temp = sequence.get(i+1);
        sequence.get(i+1) = sequence.get(d);
        sequence.get(d) = temp;

        return i+1;

    }


    public static ArrayList quicksort(ArrayList<Integer> sequence, int g, int d){

        if (g<d){
            int part = partition(sequence, g, d);

            quicksort(sequence, g, part-1);
            quicksort(sequence, part+1, d);
        }

    return sequence;


//        ArrayList<Integer> flag = new ArrayList();
//
//        int pivot = sequence.size()/2;
//        int g = 0, d = sequence.size()-1;
//
//        System.out.println("le pivot est à l'index " + pivot);
//        System.out.println("d est à l'index "+d);
//
//
//        if (sequence.get(g)>sequence.get(pivot)){
//            sequence.add(pivot+1,sequence.get(g));
//            sequence.remove(g);
//        }
//
//        if(sequence.get(d)<sequence.get(pivot)){
//            sequence.add(pivot-1, sequence.get(d));
//
//        }
//
//        return sequence;


    }


    /**
     * test quicksort
     */
    public static void main(String[] args) {

        ArrayList sample3 = new ArrayList();
        sample3 = Sequence.sequenceGenerated(5);
        System.out.println("la liste générée est: " + sample3);
        sample3 = Quicksort.quicksort(sample3, 1, sample3.size()-1);
        System.out.println("quicksort: " + sample3 );


    }

}

2 réponses

Messages postés
16331
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
8 mai 2021
2 826
Bonjour,

sequence.get(i) renvoie une valeur, pas une variable. Tu ne peux pas modifier une valeur, il n'y a que les variables dont tu peux changer l'état.

int n;
n = 5; // n est une variable, 5 est une valeur : ok
5 = n; // variable expected (5 est une valeur)


Tu devrais plutôt utiliser la méthode set(int, E)
int temp = sequence.get(i);
sequence.set(i, sequence.get(j));
sequence.set(j, temp);

Remarque : tu peux aussi utiliser Collections.swap qui fait la même chose.
Collections.swap(sequence, i, j); // import java.util.*;
Messages postés
184
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
5 mai 2021
1
Ah oui, pas bête, je n'avais pas pensé à cette éventualité... !
Et du coup je pense que je vais utiliser swap. Merci pour ton aide!