diff --git a/Algos_1/algos.c b/Algos_1/algos.c index f5cbd3df03ffca9c0d95f6b519c3a1d669b9a83f..51713cfb513e9ee3c91c2846d1db88fae126bcf2 100644 --- a/Algos_1/algos.c +++ b/Algos_1/algos.c @@ -55,4 +55,34 @@ void fusion(long * A, size_t p, size_t q, size_t r){ void triFusion(long * A, size_t n){ sousTriFusion(A, 0, n); +} + +void sousTriRapide(long* A, size_t p, size_t r) { + if (p<r-1) { + size_t q = partition(A, p, r); + sousTriRapide(A, p, q); + sousTriRapide(A, q+1, r); + } +} + +void partition(long* A, size_t p, size_t r) { + size_t pivot = A[r-1]; + size_t i = p; + long temp; + for (size_t j = p; j < r-2; j++) { + if (A[j] <= pivot) { + temp = A[i]; + A[i] = A[j]; + A[j] = temp; + i++; + } + } + temp = A[i]; + A[i] = A[r-1]; + A[r-1] = temp; + return i; +} + +void triRapide(long* A, size_t n) { + sousTriRapide(A, 0, n); } \ No newline at end of file