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