Je viens de travailler sur l'implémentation de quicksort en C# mais j'ai fait face à un tel problème. Quand je me sers ma fonctionL'algorithme quicksort C# ne marche pas
static void QS(int[] arr, int left, int right){
int pivot = left;
int temp;
int i = left + 1;
int j = left + 1;
do {
if (arr [i] < arr [pivot]) {
temp = arr [j];
arr [j] = arr [i];
arr [i] = temp;
i++;
}
else{}
j++;
}while(j<=right);
temp = arr [pivot];
arr [pivot] = arr [i - 1];
arr [i - 1] = temp;
}
Pour un tableau
int[] arr = { 12, 9, 19, 8, 7, 13, 10, 71, 18, 34, 90, 15, 3 };
Je reçois les résultats comme ceci: 9, 12, 19, 8, 7, 13, 10, 71, 18, 34, 90, 15, 3
. Des heures ont été consacrées à ce que je n'arrive toujours pas à comprendre Pourquoi index je ne procède pas. Peut-être qu'il y a plus de problèmes que je ne le pense. J'ai omis les appels récursifs pour se concentrer sur la fonction elle-même. J'utilise ce pseudo-code:
Partiton(A,l,r)
//[input corresponds to A[l…r]]
p:=A[l]
i:=l+1
for
j=l+1 to r
if A[j] < p
swap A[j] and A[i]
i:=i+1
swap A[l] and A[i‐1]
le nombre variable n'est pas déclarée – Shekhar
@Shekhar ni est-il utilisé; pourquoi le déclarer? – phoog
il a été déclaré en dehors de la fonction pour voir où index je ne parvient pas à procéder, mais je vais l'enlever rendre le code plus clair –