diff options
Diffstat (limited to 'myqsort.c')
-rw-r--r-- | myqsort.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/myqsort.c b/myqsort.c new file mode 100644 index 0000000..ac18a68 --- /dev/null +++ b/myqsort.c @@ -0,0 +1,34 @@ +#include "myqsort.h" +#include <stdlib.h> +int my_partition(display *A, int p, int r){ + int ri = p + rand() % (r - p); + display tmp = A[ri]; + A[ri] = A[r]; + A[r] = tmp; + + display pivot = A[r]; + int pos_pivot = p; + + for(int i=p; i < r; ++i){ + if(A[i].p.z < pivot.p.z){ + display aux = A[i]; + A[i] = A[pos_pivot]; + A[pos_pivot] = aux; + pos_pivot++; + } + } + + display aux = A[pos_pivot]; + A[pos_pivot] = pivot; + A[r] = aux; + + return pos_pivot; +} + +void my_qsort(display *A, int p, int r){ + if(p < r){ + int q = my_partition(A, p, r); + my_qsort(A, p, q-1); + my_qsort(A, q+1, r); + } +} |