aboutsummaryrefslogtreecommitdiff
path: root/report/qsort.c
diff options
context:
space:
mode:
Diffstat (limited to 'report/qsort.c')
-rw-r--r--report/qsort.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/report/qsort.c b/report/qsort.c
new file mode 100644
index 0000000..6877369
--- /dev/null
+++ b/report/qsort.c
@@ -0,0 +1,21 @@
+void quicksort(int arr[], int lo, int hi) {
+ if (lo >= 0 && hi >= 0 && lo < hi) {
+ int p = partition(A, lo, hi)
+ quicksort(A, lo, p)
+ quicksort(A, p + 1, hi)
+ }
+}
+
+int partition(int arr[], int lo, int hi) {
+ int pivot = arr[lo];
+ int i = lo - 1, j = hi + 1;
+ while (true) {
+ do { i++; } while (arr[i] < pivot);
+ do { j--; } while (arr[j] > pivot);
+ if (i >= j) break;
+ int temp = arr[i];
+ arr[i] = arr[j];
+ arr[j] = temp;
+ }
+ return j;
+}