summaryrefslogtreecommitdiffstats
path: root/04_exercise/quicksort.c
diff options
context:
space:
mode:
Diffstat (limited to '04_exercise/quicksort.c')
-rw-r--r--04_exercise/quicksort.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/04_exercise/quicksort.c b/04_exercise/quicksort.c
index ade513b..1f0bfb5 100644
--- a/04_exercise/quicksort.c
+++ b/04_exercise/quicksort.c
@@ -7,14 +7,20 @@
static size_t partition(int v[], size_t len);
-/* TODO: quicksort-Implementation parallelisieren */
+static TASK_QS(void, quicksort)
static void quicksort(int list[], size_t len) {
+ fprintf(stderr, "quicksort call with %p, %lu\n", (void*)list, (ulong)len);
+
if (len <= 1) return;
-
+
size_t mid = partition(list, len);
- quicksort(list, mid);
- quicksort(list + mid + 1, len - mid - 1);
+
+ quicksort_fut *first = quicksortAsync((quicksort_fut[]){quicksortFuture(list, mid)});
+ quicksort_fut *second = quicksortAsync((quicksort_fut[]){quicksortFuture(list + mid + 1, len - mid - 1)});
+
+ quicksortAwait(first);
+ quicksortAwait(second);
}
size_t partition(int v[], size_t len) {
@@ -87,7 +93,7 @@ int main(int argc, const char *argv[]) {
atexit(&tpRelease);
/* read the length of the list from the command line */
- size_t list_len = 30000000;
+ size_t list_len = 5;
if (argc >= 2) {
long arg = strtol(argv[1], (char **)&argv[strlen(argv[1])], 10);
if (arg > 0)