Skip to content
Snippets Groups Projects
Commit 05f56597 authored by chafiol's avatar chafiol
Browse files

fusion

parent a572be2f
No related merge requests found
No preview for this file type
...@@ -3,10 +3,12 @@ ...@@ -3,10 +3,12 @@
void triInsertion(long* A, size_t n){ void triInsertion(long* A, size_t n){
long cle = 0; long cle = 0;
size_t max = 0;
max--;
for(size_t i = 1; i<n; i++){ for(size_t i = 1; i<n; i++){
cle=A[i]; cle=A[i];
size_t j = i - 1; size_t j = i - 1;
while (j >= 0 && A[j] > cle){ while (j != max && A[j] > cle ){
A[j+1] = A[j]; A[j+1] = A[j];
j = j-1; j = j-1;
} }
...@@ -16,8 +18,8 @@ void triInsertion(long* A, size_t n){ ...@@ -16,8 +18,8 @@ void triInsertion(long* A, size_t n){
void sousTriFusion(long * A, size_t p, size_t r){ void sousTriFusion(long * A, size_t p, size_t r){
if(p<r-1){ if(p<(r-1)){
size_t q = (size_t)(p+r/2); size_t q = (size_t)((p+r)/2);
sousTriFusion(A, p, q); sousTriFusion(A, p, q);
sousTriFusion(A, q, r); sousTriFusion(A, q, r);
fusion(A, p, q, r); fusion(A, p, q, r);
...@@ -25,10 +27,25 @@ void sousTriFusion(long * A, size_t p, size_t 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){ void fusion(long * A, size_t p, size_t q, size_t r){
long* Ad;
long* Ag;
size_t n1 = q-p; size_t n1 = q-p;
size_t n2 = r-q; 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 indg = 0;
size_t indd = 0; size_t indd = 0;
size_t i = p; size_t i = p;
...@@ -37,7 +54,7 @@ void fusion(long * A, size_t p, size_t q, size_t r){ ...@@ -37,7 +54,7 @@ void fusion(long * A, size_t p, size_t q, size_t r){
A[i] = Ad[indd]; A[i] = Ad[indd];
indd++; indd++;
} }
else if(Ad[indd] == n2){ else if(indd == n2){
A[i] == Ag[indg]; A[i] == Ag[indg];
indg++; indg++;
} }
...@@ -47,7 +64,7 @@ void fusion(long * A, size_t p, size_t q, size_t r){ ...@@ -47,7 +64,7 @@ void fusion(long * A, size_t p, size_t q, size_t r){
} }
else{ else{
A[i] = Ad[indd]; A[i] = Ad[indd];
indg++; indd++;
} }
i++; i++;
} }
...@@ -58,15 +75,22 @@ void triFusion(long * A, size_t n){ ...@@ -58,15 +75,22 @@ void triFusion(long * A, size_t n){
} }
void sousTriRapide(long* A, size_t p, size_t r) { 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); size_t q = partition(A, p, r);
sousTriRapide(A, p, q); sousTriRapide(A, p, q);
sousTriRapide(A, q+1, r); sousTriRapide(A, q+1, r);
} }
} }
void partition(long* A, size_t p, size_t r) { size_t partition(long* A, size_t p, size_t r) {
size_t pivot = A[r-1]; 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; size_t i = p;
long temp; long temp;
for (size_t j = p; j < r-2; j++) { for (size_t j = p; j < r-2; j++) {
......
...@@ -11,4 +11,7 @@ ...@@ -11,4 +11,7 @@
void triInsertion(long* A, size_t n); void triInsertion(long* A, size_t n);
void sousTriFusion(long * A, size_t p, size_t r); void sousTriFusion(long * A, size_t p, size_t r);
void fusion(long * A, size_t p, size_t q, size_t r); void fusion(long * A, size_t p, size_t q, size_t r);
void triFusion(long * A, size_t n); void triFusion(long * A, size_t n);
\ No newline at end of file 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
No preview for this file type
#include "algos.h" #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 fd = open(file, O_RDONLY);
int i =0; if(fd == -1){
long tmp[2]; perror("open");
int nb = read(fd, tmp, sizeof(long)*2); exit(1);
while(nb == 2){ }
tab[i] = tmp[0]; char tmp[1000];
nb = read(fd,tmp,sizeof(long)*2); memset(tmp, 0, 1000);
i++; 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){ int main(int argc, char **argv){
if(argc!=3){ if(argc!=3){
...@@ -17,24 +36,40 @@ int main(int argc, char **argv){ ...@@ -17,24 +36,40 @@ int main(int argc, char **argv){
exit(1); exit(1);
} }
long* tab = malloc(sizeof(long)*100); long tab[100];
readToTab(tab, argv[2]); int n = readToTab(tab, argv[2]);
for(int i = 0; i<100; i++){ printf("Base : ");
printf("%ld - ", tab[i]); for(int i = 0; i<n; i++){
printf("%ld,", tab[i]);
} }
printf("\n");
if((strcmp(argv[1], "--insertion") == 0)){ 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)){ 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)){ 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{ else{
printf("Usage: ./tri <option> <input.txt>\n"); printf("Usage: ./tri <option> <input.txt>\n");
} }
free(tab);
return 0; return 0;
} }
\ No newline at end of file
3 4 5 6 1 2 9 3 4 5 6 1 2 9 11 .
\ No newline at end of file \ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment