Mercurial > public > algo-animator
view src/algorithms.c @ 31:61104b22a25d
I think it is working now...
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 29 Jun 2023 18:05:22 +0100 |
parents | f945bcc3571f |
children | 8ed1256dd518 |
line wrap: on
line source
#include "algorithms.h" /* Bubble sort */ void *bubble_sort(void *arguments) { struct AlgoArgs *args = (struct AlgoArgs *)arguments; 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; if (args->arr[i].value > args->arr[i + 1].value) { swap_elements(i, i + 1, args->arr); swapped = true; } 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; args->arr[min_idx].current = true; control_flow(args->delay, args->sequentially, &args->pause); args->arr[i].current = false; args->arr[min_idx].current = false; if (args->arr[i].value < args->arr[min_idx].value) { min_idx = i; } } swap_elements(min_idx, step, args->arr); } } /* Quick sort */