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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
4 /* Bubble sort */
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
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
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
9 for (int step = 0; step < args->arr_size - 1; step++) {
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
10 int swapped = false;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
11
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
12 for (int i = 0; i < args->arr_size - step - 1; i++) {
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
13 args->comparisons++;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
14 args->arr[i].current = true;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
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
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
17 if (args->arr[i].value > args->arr[i + 1].value) {
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
18 swap_elements(i, i + 1, args->arr);
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
19 swapped = true;
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
20 }
30
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
21
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
22 control_flow(args->delay, args->sequentially, &args->pause);
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
23 args->arr[i].current = false;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
24 args->arr[i + 1].current = false;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
25 }
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
26
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
27 if (swapped == 0) {
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
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
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
32
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
33
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
34 /* Selection sort */
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
35
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
36 void *selection_sort(void *arguments) {
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
37 struct AlgoArgs *args = (struct AlgoArgs *)arguments;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
38
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
39 for (int step = 0; step < args->arr_size - 1; step++) {
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
40 int min_idx = step;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
41
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
42 for (int i = step + 1; i < args->arr_size; i++) {
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
43 args->comparisons++;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
44 args->arr[i].current = true;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
45
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
46 if (args->arr[i].value < args->arr[min_idx].value) {
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
47 min_idx = i;
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
48 }
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
49
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
50 control_flow(args->delay, args->sequentially, &args->pause);
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
51 }
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
52
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
53 swap_elements(min_idx, step, args->arr);
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
54 }
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
55 }
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
56
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
57
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
58 /* Quick sort */
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
59
f945bcc3571f refactor
Dennis C. M. <dennis@denniscm.com>
parents: 29
diff changeset
60