summaryrefslogtreecommitdiff
path: root/myqsort.c
diff options
context:
space:
mode:
Diffstat (limited to 'myqsort.c')
-rw-r--r--myqsort.c34
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);
+ }
+}