Bonjour à tous,
Je débute en algorithmie, dans un cursus de développeur j'étudie la complexité des tri sur les différentes structures de données.
Mon problème concerne le tri d'un tableau par le tri rapide; j'ai deux implémentations et je ne réussis à n'en faire fonctionner qu'une, je ne trouve pas la solution pour la seconde, même après des recherches sur différents fourms
Voilà mon code :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 //tri rapide public int Partition (int deb, int fin){ int j = deb; int pivot = tab [deb]; for (int i = deb+1; i <= fin; i++){ if (tab[i] < pivot){ j++; Echanger(j,i); } } Echanger_2 (tab[j], pivot); return j; } public int Partition_2(int deb, int fin){ int val = tab[deb]; int i = deb - 1; int j = fin + 1; while( i < j ) { do { j--; } while(tab[j] > val); do { i++; } while(tab[i] < val); if( i < j ) Echanger(i, j); } return j; } public void Tri_rapide (int deb, int fin){ if (deb < fin) { int pivot = Partition (deb,fin); //on récupère j Tri_rapide (deb, pivot); Tri_rapide (pivot+1, fin); } }
Mon problème vient de la méthode Partition ();
De plus la méthode Echanger() échange deux valeurs du tableau, et Echanger_2() échange 2 variables quelconques
L'appel de la fonction se fait comme suit :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 switch (choix){ case 1 : tab.Tri_minimum(); break; case 2 : tab.Tri_maximum(); break; case 3 : tab.Tri_insertion(); break; case 4 : tab.Tri_bulle(); break; case 5 : tab.Tri_rapide(1, taille-1); break; default : System.out.println("MAUVAISE VALEUR ENTREE !! \n"); break; }
et l'erreur est :
Je comprends qu'il y a un soucis au niveau du bouclage ou de l'appel, quelque chose tourne dans le vide, mais je ne le situe pas.Exception in thread "main" java.lang.StackOverflowError
at TD.Tableau.Tri_rapide(Tableau.java:268)
at TD.Tableau.Tri_rapide(Tableau.java:269)
... ...
... ...
at TD.Tableau.Tri_rapide(Tableau.java:269)
La méthode Partition_2() fonctionne très bien.
je demande donc votre aide,
merci d'avance
Partager