Mercurial > public > algo-animator
annotate 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 |
rev | line source |
---|---|
29
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
1 #include "algorithms.h" |
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
2 |
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
3 |
30 | 4 /* Bubble sort */ |
5 | |
29
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
6 void *bubble_sort(void *arguments) { |
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
7 struct AlgoArgs *args = (struct AlgoArgs *)arguments; |
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
8 |
30 | 9 for (int step = 0; step < args->arr_size - 1; step++) { |
10 int swapped = false; | |
11 | |
12 for (int i = 0; i < args->arr_size - step - 1; i++) { | |
13 args->comparisons++; | |
14 args->arr[i].current = true; | |
15 args->arr[i + 1].current = true; | |
29
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
16 |
30 | 17 if (args->arr[i].value > args->arr[i + 1].value) { |
18 swap_elements(i, i + 1, args->arr); | |
19 swapped = true; | |
29
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
20 } |
30 | 21 |
22 control_flow(args->delay, args->sequentially, &args->pause); | |
23 args->arr[i].current = false; | |
24 args->arr[i + 1].current = false; | |
25 } | |
26 | |
27 if (swapped == 0) { | |
28 break; | |
29
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
29 } |
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
30 } |
dae463bbf5ca
implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff
changeset
|
31 } |
30 | 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 |