Mercurial > public > algo-animator
comparison 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 |
comparison
equal
deleted
inserted
replaced
29:dae463bbf5ca | 30:f945bcc3571f |
---|---|
1 #include "algorithms.h" | 1 #include "algorithms.h" |
2 | 2 |
3 | |
4 /* Bubble sort */ | |
3 | 5 |
4 void *bubble_sort(void *arguments) { | 6 void *bubble_sort(void *arguments) { |
5 struct AlgoArgs *args = (struct AlgoArgs *)arguments; | 7 struct AlgoArgs *args = (struct AlgoArgs *)arguments; |
6 | 8 |
7 printf("Size: %i\n", args->arr_size); | 9 for (int step = 0; step < args->arr_size - 1; step++) { |
8 printf("Comparisons: %i\n", args->comparisons); | 10 int swapped = false; |
9 (args->comparisons)++; | |
10 printf("Comparisons: %i\n", args->comparisons); | |
11 /* | |
12 for (int i = 0; i < args->arr_size - 1; i++) { | |
13 //(*args->comparisons)++; | |
14 | 11 |
15 for (int j = 0; j < args->arr_size - i - 1; j++) { | 12 for (int i = 0; i < args->arr_size - step - 1; i++) { |
16 //(*args->comparisons)++; | 13 args->comparisons++; |
17 | 14 args->arr[i].current = true; |
18 if (args->arr[j].value > args->arr[j + 1].value) { | 15 args->arr[i + 1].current = true; |
19 //swap_elements(j, j + 1, args->arr); | 16 |
17 if (args->arr[i].value > args->arr[i + 1].value) { | |
18 swap_elements(i, i + 1, args->arr); | |
19 swapped = true; | |
20 } | 20 } |
21 | 21 |
22 | 22 control_flow(args->delay, args->sequentially, &args->pause); |
23 //usleep((*args->delay)); | 23 args->arr[i].current = false; |
24 //bool test = false; | 24 args->arr[i + 1].current = false; |
25 //delay_flow(args->delay, &test); | 25 } |
26 | |
27 if (swapped == 0) { | |
28 break; | |
26 } | 29 } |
27 } | 30 } |
28 */ | |
29 } | 31 } |
32 | |
33 | |
34 /* Selection sort */ | |
35 | |
36 void *selection_sort(void *arguments) { | |
37 struct AlgoArgs *args = (struct AlgoArgs *)arguments; | |
38 | |
39 for (int step = 0; step < args->arr_size - 1; step++) { | |
40 int min_idx = step; | |
41 | |
42 for (int i = step + 1; i < args->arr_size; i++) { | |
43 args->comparisons++; | |
44 args->arr[i].current = true; | |
45 | |
46 if (args->arr[i].value < args->arr[min_idx].value) { | |
47 min_idx = i; | |
48 } | |
49 | |
50 control_flow(args->delay, args->sequentially, &args->pause); | |
51 } | |
52 | |
53 swap_elements(min_idx, step, args->arr); | |
54 } | |
55 } | |
56 | |
57 | |
58 /* Quick sort */ | |
59 | |
60 |