diff 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
line wrap: on
line diff
--- a/src/algorithms.c	Wed Jun 28 20:10:55 2023 +0100
+++ b/src/algorithms.c	Thu Jun 29 17:48:36 2023 +0100
@@ -1,29 +1,60 @@
 #include "algorithms.h"
 
 
+/* Bubble sort */
+
 void *bubble_sort(void *arguments) {
 	struct AlgoArgs *args = (struct AlgoArgs *)arguments;
 
-	printf("Size: %i\n", args->arr_size);
-	printf("Comparisons: %i\n", args->comparisons);
-	(args->comparisons)++;
-	printf("Comparisons: %i\n", args->comparisons);
-	/*
-	for (int i = 0; i < args->arr_size - 1; i++) {
-		//(*args->comparisons)++;
+	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;
 
-		for (int j = 0; j < args->arr_size - i - 1; j++) {
-			//(*args->comparisons)++;
-			
-			if (args->arr[j].value > args->arr[j + 1].value) {
-				//swap_elements(j, j + 1, args->arr);
+			if (args->arr[i].value > args->arr[i + 1].value) {
+				swap_elements(i, i + 1, args->arr);
+				swapped = true;
 			}
-			
-			
-			//usleep((*args->delay));
-			//bool test = false;
-			//delay_flow(args->delay, &test);
+
+			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;
+
+			if (args->arr[i].value < args->arr[min_idx].value) {
+				min_idx = i;
+			}
+
+			control_flow(args->delay, args->sequentially, &args->pause);
+		}
+
+		swap_elements(min_idx, step, args->arr);
+	}
+}
+
+
+/* Quick sort */
+
+