Skip to content
Snippets Groups Projects
Commit cdc326e7 authored by Mickael Da Silva's avatar Mickael Da Silva
Browse files

Verbose

parent 5b789a25
No related merge requests found
No preview for this file type
......@@ -55,4 +55,88 @@ void fusion(long * A, size_t p, size_t q, size_t r){
void triFusion(long * A, size_t n){
sousTriFusion(A, 0, n);
}
// --------------------------------------------------------
void sousTriFusionVerbose(long * A, size_t p, size_t r, struct data* d){
if(p<(r-1)){
d->comparison++;
size_t q = (size_t)((p+r)/2);
d->write++;
sousTriFusionVerbose(A, p, q,d);
sousTriFusionVerbose(A, q, r, d);
fusionVerbose(A, p, q, r, d);
}
}
void fusionVerbose(long * A, size_t p, size_t q, size_t r, struct data* d){
size_t n1 = q-p;
d->write++;
size_t n2 = r-q;
d->write++;
long Ad[n2];
memset(Ad, 0, n2);
d->write+=n2;
int j = 0;
for(size_t i = q; i<r; i++){
Ad[j] = A[i];
d->write++;
j++;
d->write++;
}
long Ag[n1];
memset(Ag, 0, n1);
d->write+=n1;
j = 0;
for(size_t i = p; i<q; i++){
Ag[j] = A[i];
d->write++;
j++;
d->write++;
}
size_t indg = 0;
size_t indd = 0;
size_t i = p;
d->write++;
while (i < r){
d->comparison++;
if(indg == n1){
d->comparison++;
A[i] = Ad[indd];
d->write++;
indd++;
d->write++;
}
else if(indd == n2){
d->comparison+=2;
A[i] == Ag[indg];
d->write++;
indg++;
d->write++;
}
else if(Ag[indg] < Ad[indd]){
d->comparison+=3;
A[i] = Ag[indg];
d->write++;
indg++;
d->write++;
}
else{
d->comparison+=4;
A[i] = Ad[indd];
d->write++;
indd++;
d->write++;
}
i++;
d->write++;
}
}
void triFusionVerbose(long * A, size_t n, struct data* d){
sousTriFusionVerbose(A, 0, n, d);
}
\ No newline at end of file
#ifndef triFusion_h
#define triFusion_h
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
......@@ -8,6 +12,14 @@
#include <fcntl.h>
#include <string.h>
#include "utils.h"
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 sousTriFusionVerbose(long * A, size_t p, size_t r, struct data* d);
void fusionVerbose(long * A, size_t p, size_t q, size_t r, struct data* d);
void triFusionVerbose(long * A, size_t n, struct data* d);
#endif
\ No newline at end of file
No preview for this file type
......@@ -13,3 +13,26 @@ void triInsertion(long* A, size_t n){
A[j+1] = cle;
}
}
// --------------------------------------------------------
void triInsertionVerbose(long* A, size_t n, struct data* d){
long cle = 0;
size_t max = 0; max--;
d->write++;
for(size_t i = 1; i<n; i++){
cle=A[i];
d->write++;
size_t j = i - 1;
d->write++;
while (j != max && A[j] > cle ){
d->comparison+=2;
A[j+1] = A[j];
d->write++;
j = j-1;
d->write++;
}
A[j+1] = cle;
d->write++;
}
}
\ No newline at end of file
#ifndef triInsertion_h
#define triInsertion_h
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
......@@ -8,4 +11,10 @@
#include <fcntl.h>
#include <string.h>
void triInsertion(long* A, size_t n);
\ No newline at end of file
#include "utils.h"
void triInsertion(long* A, size_t n);
void triInsertionVerbose(long* A, size_t n, struct data* d);
#endif
\ No newline at end of file
No preview for this file type
......@@ -32,4 +32,54 @@ size_t partition(long* A, size_t p, size_t r) {
void triRapide(long* A, size_t n) {
sousTriRapide(A, 0, n);
}
// --------------------------------------------------------
void sousTriRapideVerbose(long* A, size_t p, size_t r, struct data* d) {
size_t max = 0; max--;
d->write++;
if(r-1 != max){
d->comparison++;
if (p<(r-1)) {
d->comparison++;
size_t q = partitionVerbose(A, p, r, d);
d->write++;
sousTriRapideVerbose(A, p, q, d);
sousTriRapideVerbose(A, q+1, r, d);
}
}
}
size_t partitionVerbose(long* A, size_t p, size_t r, struct data* d) {
long pivot = A[r-1];
d->write++;
size_t i = p;
d->write++;
for (size_t j = p; j <= r-2; j++) {
if (A[j] <= pivot) {
d->comparison++;
long temp = A[i];
d->write++;
A[i] = A[j];
d->write++;
A[j] = temp;
d->write++;
i++;
d->write++;
}
}
long temp = A[i];
d->write++;
A[i] = A[r-1];
d->write++;
A[r-1] = temp;
d->write++;
return i;
}
void triRapideVerbose(long* A, size_t n, struct data* d) {
sousTriRapideVerbose(A, 0, n, d);
}
\ No newline at end of file
#ifndef triRapide_h
#define triRapide_h
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
......@@ -8,6 +11,14 @@
#include <fcntl.h>
#include <string.h>
#include "utils.h"
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);
void triRapideVerbose(long* A, size_t n, struct data* d);
size_t partitionVerbose(long* A, size_t p, size_t r, struct data* d);
void sousTriRapideVerbose(long* A, size_t p, size_t r, struct data* d);
#endif
\ No newline at end of file
No preview for this file type
#ifndef utils_h
#define utils_h
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
......@@ -18,4 +21,6 @@ struct data {
};
int readToTab(long* tab, char* file);
void initData(struct data* d);
\ No newline at end of file
void initData(struct data* d);
#endif
\ No newline at end of file
File added
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