diff options
author | lonkaars <loek@pipeframe.xyz> | 2023-02-06 19:08:54 +0100 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2023-02-06 19:08:54 +0100 |
commit | 23ef85751e0c228ba728ce1460dce75c3341de75 (patch) | |
tree | c206fc735bcf7ef325a2c5b0324d8979610f3816 /algo1w2 | |
parent | feda98d7c7fc0771e3f143932d5184ab128dea92 (diff) |
week 2 deel 1 klaar
Diffstat (limited to 'algo1w2')
-rw-r--r-- | algo1w2/main.c | 70 |
1 files changed, 60 insertions, 10 deletions
diff --git a/algo1w2/main.c b/algo1w2/main.c index 4bc6c46..19d2138 100644 --- a/algo1w2/main.c +++ b/algo1w2/main.c @@ -1,26 +1,76 @@ #include <stdio.h> +#include <stdbool.h> +#include <stdlib.h> + +// https://stackoverflow.com/questions/8862136/is-there-a-built-in-swap-function-in-c +#define swap(a, b) { (a) = (a) ^ (b); (b) = (a) ^ (b); (a) = (b) ^ (a); } + +void print_arr(int* arr, unsigned size); void bubble_sort(int* arr, unsigned size) { - int outer, inner; - bool sorted = false; -} + // index array (stabiliteit) + // int* indices = malloc(size * sizeof(int)); + // for (unsigned i = 0; i < size; i++) indices[i] = i; -void print_arr(int* arr, unsigned size) { - printf("["); - for (unsigned i = 0; i < size; i++) { - if (i > 0) printf(", "); - printf("%d", arr[i]); + int outer, inner; + bool sorted; + for (outer = 0; outer < size - 2; outer++) { + sorted = true; // check if array was modified during inner loop + for (inner = size - 2; inner >= outer; inner--) { + if (arr[inner] >= arr[inner+1]) { + swap(arr[inner], arr[inner+1]); + // swap(indices[inner], indices[inner+1]); // swap indices array (stabiliteit) + sorted = false; + } + } + printf("outer %d: ", outer); + print_arr(arr, size); + // print index array (stabiliteit) + // printf("index %d: ", outer); + // print_arr(indices, size); + if (sorted) break; // break if nothing changed (already sorted) } - printf("]\n"); } +/* + * ik heb een tweede array aangemaakt met allen indexgetallen, en elke keer als + * er ge`swap`t wordt swap ik ook de array met indices. hierdoor heb ik na het + * uitvoeren van het algoritme een array waarin elke waarde de oorspronkelijke + * index van elke waarde uit de uitvoer-array bevat: + * + * unsorted: [7, 3, 8, 3, 3, 5, 4, 6, 3, 0] + * sorted: [0, 3, 3, 3, 3, 4, 5, 6, 7, 8] + * indexes: [9, 8, 4, 3, 1, 6, 5, 7, 0, 2] + * ^ ^ ^ ^ deze zijn op volgorde van groot naar klein + * + * na het uitvoeren van "de test", zie ik dat alle '3'-en in de array met + * indices van groot naar klein gesorteerd zijn, en niet op een willekeurige + * volgorde. hieruit concludeer ik dat dit sorteeralgoritme stabiel is. + */ + int main() { - int arr[] = { 7, 3, 8, 1, 2, 5, 4, 6, 9, 0 }; + int arr[] = { 7, 3, 8, 1, 2, 5, 4, 6, 9, 0 }; // array van opdracht 1 + // int arr[] = { 7, 3, 8, 3, 3, 5, 4, 6, 3, 0 }; // array om stabiliteit te testen unsigned size = sizeof(arr) / sizeof(int); + printf("unsorted: "); print_arr(arr, size); + printf("\n"); + bubble_sort(arr, size); + printf("\n"); + + printf("sorted: "); print_arr(arr, size); return 0; } + +void print_arr(int* arr, unsigned size) { + printf("["); + for (unsigned i = 0; i < size; i++) { + if (i > 0) printf(", "); + printf("%d", arr[i]); + } + printf("]\n"); +} |