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 @@
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++) {
......
......@@ -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
No preview for this file type
#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
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
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