Bonjour!
Je suis en train de débuter en C et j'ai un petit problème concernant les tris!
j'aimerais réussir un tri rapide de type quicksort. j'ai codé selon l'algorithme du cours en le modifiant un peu pour ma configuration. La compilation se passe sans problèmes mais lorsque j'exécute le programme, il y a "segmentation fault". Je sais pas si j'ai fais une erreur de syntaxe ou si je me suis trompé dans mes variables. ça fait plusieurs heures que je suis dessus, je suis à bout !
voila mon code sur un fichier "a" :
cette partie du code est appeler sur un autre fichier "b" :
Code : 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 /*--------------------- QUICKSORT --------------------------*/ int trouvePivot( TabElem* tab, int i, int j ) { int k = i+1; while ( k <= j ){ if ( tab->elems[k] > tab->elems[i] ){ return k; } if ( tab->elems[k] < tab->elems[i] ){ return i; } k++; } return -1; } int partition( TabElem* tab, int i, int j, int pivot ) { int k = i; int l = j; do { echange (&tab->elems[k] , &tab->elems[l]); while ( tab->elems[k] < pivot ){ k++; } while ( tab->elems[l] >= pivot ){ l = l-1; } }while ( k >l ); return k; } void quicksort( TabElem* tab, int i, int j ) { int idxp; int k; idxp = trouvePivot ( tab, i ,j ); if (idxp != -1 ) { k = partition ( tab , i , j , tab->elems[idxp] ); quicksort( tab , i , k-1 ); quicksort( tab , k , j ); } }
J'avais fait un tri a bulle juste avant qui fonctionnais mais VRAIMENT trop long à s'exécuté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part quicksort( tab, 0, nbelems - 1);
Merci de votre aide!
Partager