diff --git a/Algos_1/a.out b/Algos_1/a.out index 69ac26e1ad5800fffe9f63ed47736f0d3501dd2e..ce356845c9f1c0a90b7087c5a90462f4120f8863 100755 Binary files a/Algos_1/a.out and b/Algos_1/a.out differ diff --git a/Algos_1/algos.c b/Algos_1/algos.c index 51713cfb513e9ee3c91c2846d1db88fae126bcf2..b5ea19f010487b2665558513ae508c27399be957 100644 --- a/Algos_1/algos.c +++ b/Algos_1/algos.c @@ -3,10 +3,12 @@ void triInsertion(long* A, size_t n){ long cle = 0; + size_t max = 0; + max--; for(size_t i = 1; i<n; i++){ cle=A[i]; size_t j = i - 1; - while (j >= 0 && A[j] > cle){ + while (j != max && A[j] > cle ){ A[j+1] = A[j]; j = j-1; } @@ -16,8 +18,8 @@ void triInsertion(long* A, size_t n){ void sousTriFusion(long * A, size_t p, size_t r){ - if(p<r-1){ - size_t q = (size_t)(p+r/2); + if(p<(r-1)){ + size_t q = (size_t)((p+r)/2); sousTriFusion(A, p, q); sousTriFusion(A, q, r); fusion(A, p, q, r); @@ -25,10 +27,25 @@ void sousTriFusion(long * A, size_t p, size_t r){ } void fusion(long * A, size_t p, size_t q, size_t r){ - long* Ad; - long* Ag; size_t n1 = q-p; size_t n2 = r-q; + + long Ad[n2]; + memset(Ad, 0, n2); + int j =0; + for(size_t i = q; i<r; i++){ + Ad[j] = A[i]; + j++; + } + + long Ag[n1]; + memset(Ag, 0, n1); + j =0; + for(size_t i = p; i<q; i++){ + Ag[j] = A[i]; + j++; + } + size_t indg = 0; size_t indd = 0; size_t i = p; @@ -37,7 +54,7 @@ void fusion(long * A, size_t p, size_t q, size_t r){ A[i] = Ad[indd]; indd++; } - else if(Ad[indd] == n2){ + else if(indd == n2){ A[i] == Ag[indg]; indg++; } @@ -47,7 +64,7 @@ void fusion(long * A, size_t p, size_t q, size_t r){ } else{ A[i] = Ad[indd]; - indg++; + indd++; } i++; } @@ -58,15 +75,22 @@ void triFusion(long * A, size_t n){ } void sousTriRapide(long* A, size_t p, size_t r) { - if (p<r-1) { + if (p<(r-1)) { size_t q = partition(A, p, r); sousTriRapide(A, p, q); sousTriRapide(A, q+1, r); } } -void partition(long* A, size_t p, size_t r) { - size_t pivot = A[r-1]; +size_t partition(long* A, size_t p, size_t r) { + printf("r >>>>>>>>>> %d\n", r); + size_t max = 0; + max--; + size_t pivot = 0; + if(r-1 != max){ + pivot = A[r-1]; + } + size_t i = p; long temp; for (size_t j = p; j < r-2; j++) { diff --git a/Algos_1/algos.h b/Algos_1/algos.h index 4ea67b136bc1c7712be2f2a4450e90b075ef3c3e..ec7b0afacb4a1926db812faaa0b41e03c894522d 100644 --- a/Algos_1/algos.h +++ b/Algos_1/algos.h @@ -11,4 +11,7 @@ void triInsertion(long* A, size_t n); void sousTriFusion(long * A, size_t p, size_t r); void fusion(long * A, size_t p, size_t q, size_t r); -void triFusion(long * A, size_t n); \ No newline at end of file +void triFusion(long * A, size_t n); +void triRapide(long* A, size_t n); +size_t partition(long* A, size_t p, size_t r); +void sousTriRapide(long* A, size_t p, size_t r); \ No newline at end of file diff --git a/Algos_1/algos.o b/Algos_1/algos.o index bb617f334137bd27fc78dd604ea034953514c58a..fcca01db38feaff275db7d0b477cb2e77af7d5ac 100644 Binary files a/Algos_1/algos.o and b/Algos_1/algos.o differ diff --git a/Algos_1/main.c b/Algos_1/main.c index bd63d11133a5f3eebcf08e8ea51c49e3ec2b5099..b60a072b2fe67091855531968b4fc9a3f33bbf9c 100644 --- a/Algos_1/main.c +++ b/Algos_1/main.c @@ -1,15 +1,34 @@ #include "algos.h" -void readToTab(long* tab, char* file){ +int readToTab(long* tab, char* file){ + int n = 0; int fd = open(file, O_RDONLY); - int i =0; - long tmp[2]; - int nb = read(fd, tmp, sizeof(long)*2); - while(nb == 2){ - tab[i] = tmp[0]; - nb = read(fd,tmp,sizeof(long)*2); - i++; -} + if(fd == -1){ + perror("open"); + exit(1); + } + char tmp[1000]; + memset(tmp, 0, 1000); + char temp; + size_t j = 0, x=0; + read(fd,&temp,sizeof(char)); + + while(temp != '.'){ + if(temp != ' '){ + tmp[x] = temp; + x++; + n++; + } + else if(temp == ' '){ + long t = atol(tmp); + tab[j] = t; + memset(tmp, 0, 1000); + j++; + x=0; + } + read(fd,&temp,sizeof(char)); + } + return n-1; } int main(int argc, char **argv){ if(argc!=3){ @@ -17,24 +36,40 @@ int main(int argc, char **argv){ exit(1); } - long* tab = malloc(sizeof(long)*100); - readToTab(tab, argv[2]); - for(int i = 0; i<100; i++){ - printf("%ld - ", tab[i]); + long tab[100]; + int n = readToTab(tab, argv[2]); + printf("Base : "); + for(int i = 0; i<n; i++){ + printf("%ld,", tab[i]); } + printf("\n"); if((strcmp(argv[1], "--insertion") == 0)){ - + triInsertion(tab, n); + printf("Insertion : "); + for(int i = 0; i<n; i++){ + printf("%ld,", tab[i]); + } + printf("\n"); } else if((strcmp(argv[1], "--fusion")== 0)){ - + triFusion(tab, n); + printf("Fusion : "); + for(int i = 0; i<n; i++){ + printf("%ld,", tab[i]); + } + printf("\n"); } else if((strcmp(argv[1], "--rapide")== 0)){ - + triRapide(tab, n); + printf("Rapide : "); + for(int i = 0; i<n; i++){ + printf("%ld,", tab[i]); + } + printf("\n"); } else{ printf("Usage: ./tri <option> <input.txt>\n"); } - free(tab); return 0; } \ No newline at end of file diff --git a/Algos_1/test.txt b/Algos_1/test.txt index a968cd1a2d480b6f8fc2fc490f7ffa9502100bac..b3e0f2ef70ab7d25a19b810545fb0ef5127fcffd 100644 --- a/Algos_1/test.txt +++ b/Algos_1/test.txt @@ -1 +1 @@ -3 4 5 6 1 2 9 \ No newline at end of file +3 4 5 6 1 2 9 11 . \ No newline at end of file