diff --git a/TP8-sort/others/insert_sort.c b/TP8-sort/others/insert_sort.c new file mode 100644 index 0000000000000000000000000000000000000000..381b1c3f740623661c363fcdf7573227477032d8 --- /dev/null +++ b/TP8-sort/others/insert_sort.c @@ -0,0 +1,118 @@ +#include "sort.h" +#include <stdio.h> + +bool isSorted(int size, int tab[size], bool (*comp)(int, int)) { + + for (int i = 1; i < size; i++) { + if (comp(tab[i - 1], tab[i])) { + printf("not sorted\n"); + return false; + } + } + printf("sorted !\n"); + return true; +} + +void random_tab(int size, int tab[size], int min, int max) { + assert(max > min); + for (int i = 0; i < size; i++) { + tab[i] = min + rand() % (max - min); + } +} + +bool isGreater(int a, int b) { return a > b; } + +bool isSmaller(int a, int b) { return a < b; } + +void swap(int *a, int *b) { + int tmp = *a; + *a = *b; + *b = tmp; +} + +void print_array(int *arr, int size) { + for (int i = 0; i < size; i++) { + printf("%d ", arr[i]); + } + printf("\n"); +} + +// renvoie la nouvelle pos de la val +int pos(int size, int tab[size], int val) { + int pos = 0; + while (val > tab[pos] && pos < size) { + pos++; + } + return pos; +} + +// décale +void shift(int size, int tab[size], int pos) { + for (int i = size - 1; i > pos; i--) { + tab[i] = tab[i - 1]; + } +} + +void sort(int *sorted, const int *const orig, int nitems, bool (*comp)(int, int)) { + + // copy + for (int i = 0; i < nitems; i++) { + sorted[i] = orig[i]; + } + + + for (int i = 1; i <= nitems; i++) { + + // trouver bonne pos + int pos=0; + int tmp=sorted[i]; + print_array(sorted, nitems); + while((sorted[pos]>sorted[i] ) && pos <= i){ //tant que tab[pos]<tab[i] + pos++; + } + printf("pos = %d, tmp= %d \n",pos,tmp); + + // int tmp = sorted[i]; + // // décaler de pos à i + // shift(i, sorted, p); + // sorted[p] = tmp; + // printf("i =%d]; ",i); + // print_array(sorted, nitems); + + } +} + + + + + + +// void sort(int *sorted, const int *const orig, int nitems, +// bool (*comp)(int, int)) { + +// for (int i = 1; i < nitems; i++) { +// int p = pos(i, sorted, sorted[i]); +// step(i, sorted, p); +// } +// } + +// void sort(int *sorted, const int *const orig, int nitems, +// bool (*comp)(int, int)) { + +// // copy +// for (int i = 0; i < nitems; i++) { +// sorted[i] = orig[i]; +// } + +// for (int i=1 ; i < nitems; i++) { +// int j = i; + +// while (j > 0 && sorted[j-1] > sorted[j]) { +// int tmp = sorted[j]; +// sorted[j] = sorted[j-1]; +// sorted[j-1] = tmp; + +// j--; +// } +// } +// } \ No newline at end of file diff --git a/TP8-sort/others/select_sort.c b/TP8-sort/others/select_sort.c new file mode 100644 index 0000000000000000000000000000000000000000..7c1683329e85670d9b17f9a50a9cd203174fd591 --- /dev/null +++ b/TP8-sort/others/select_sort.c @@ -0,0 +1,76 @@ +#include "sort.h" +#include <stdio.h> + +bool isSorted(int nitems, int sorted[nitems], bool (*comp)(int, int)){ + + for( int i = 1; i<nitems;i++){ + if(comp(sorted[i-1],sorted[i])){ + printf("not sorted\n"); + return false; + } + } + printf("sorted !\n"); + return true; +} + + +void random_tab(int nitems,int sorted[nitems],int min,int max) { + assert(max > min); + for (int i=0;i<nitems;i++) { + sorted[i] = min+rand()%(max-min); + } +} + +bool isGreater(int a, int b) { return a > b; } + +bool isSmaller(int a, int b) { return a < b; } + +void swap(int *a, int *b) { + int tmp = *a; + *a = *b; + *b = tmp; +} + +void print_array(int *arr, int nitems) { + for (int i = 0; i < nitems; i++) { + printf("%d ", arr[i]); + } + printf("\n"); +} + + +void sort(int *sorted, const int *const orig, int nitems, bool (*comp)(int, int)) { + + // copy + for (int i = 0; i < nitems; i++) { + sorted[i] = orig[i]; + } + + + // recherche dans le sortedleau de l'indice de la plus petite valeur + int ind_min = 0; + for (int k=1;k<nitems;k++) { + if (sorted[k] < sorted[ind_min]) { + ind_min = k; + } + } + + // échange de la 1ère valeur avec la plus petite du sortedleau + int tmp = sorted[0]; + sorted[0] = sorted[ind_min]; + sorted[ind_min] = tmp; + + // tri par sélection + for (int i=0;i<nitems-1;i++) { + ind_min = i; + for (int k=i+1;k<nitems;k++) { + if (sorted[k] < sorted[ind_min]) { + ind_min = k; + } + } + tmp = sorted[i]; + sorted[i] = sorted[ind_min]; + sorted[ind_min] = tmp; + } + +}