Skip to content
Snippets Groups Projects
Commit 26d8033e authored by thib's avatar thib
Browse files

extra sort

parent 2cb4c5e8
Branches
No related tags found
No related merge requests found
#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
#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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment