Mercurial > public > algo-animator
diff src/algorithms.c @ 30:f945bcc3571f
refactor
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 29 Jun 2023 17:48:36 +0100 |
parents | dae463bbf5ca |
children | 61104b22a25d |
line wrap: on
line diff
--- a/src/algorithms.c Wed Jun 28 20:10:55 2023 +0100 +++ b/src/algorithms.c Thu Jun 29 17:48:36 2023 +0100 @@ -1,29 +1,60 @@ #include "algorithms.h" +/* Bubble sort */ + void *bubble_sort(void *arguments) { struct AlgoArgs *args = (struct AlgoArgs *)arguments; - printf("Size: %i\n", args->arr_size); - printf("Comparisons: %i\n", args->comparisons); - (args->comparisons)++; - printf("Comparisons: %i\n", args->comparisons); - /* - for (int i = 0; i < args->arr_size - 1; i++) { - //(*args->comparisons)++; + for (int step = 0; step < args->arr_size - 1; step++) { + int swapped = false; + + for (int i = 0; i < args->arr_size - step - 1; i++) { + args->comparisons++; + args->arr[i].current = true; + args->arr[i + 1].current = true; - for (int j = 0; j < args->arr_size - i - 1; j++) { - //(*args->comparisons)++; - - if (args->arr[j].value > args->arr[j + 1].value) { - //swap_elements(j, j + 1, args->arr); + if (args->arr[i].value > args->arr[i + 1].value) { + swap_elements(i, i + 1, args->arr); + swapped = true; } - - - //usleep((*args->delay)); - //bool test = false; - //delay_flow(args->delay, &test); + + control_flow(args->delay, args->sequentially, &args->pause); + args->arr[i].current = false; + args->arr[i + 1].current = false; + } + + if (swapped == 0) { + break; } } - */ } + + +/* Selection sort */ + +void *selection_sort(void *arguments) { + struct AlgoArgs *args = (struct AlgoArgs *)arguments; + + for (int step = 0; step < args->arr_size - 1; step++) { + int min_idx = step; + + for (int i = step + 1; i < args->arr_size; i++) { + args->comparisons++; + args->arr[i].current = true; + + if (args->arr[i].value < args->arr[min_idx].value) { + min_idx = i; + } + + control_flow(args->delay, args->sequentially, &args->pause); + } + + swap_elements(min_idx, step, args->arr); + } +} + + +/* Quick sort */ + +