Skip to content
Snippets Groups Projects
Commit 82fe2d0c authored by chafiol's avatar chafiol
Browse files

FINISHED: tri fusion

parent 8f637f30
No related merge requests found
#include "triFusion.h"
void sousTriFusion(long * A, size_t p, size_t r){
if (p + 1 < r) {
size_t q = (size_t)((p + r) / 2);
sousTriFusion(A, p, q);
sousTriFusion(A, q, r);
fusion(A, p, q, r);
}
void sousTriFusion(long* A, const size_t p, const size_t r) {
if (p + 1 < r) {
size_t q = (size_t)((p + r) / 2);
sousTriFusion(A, p, q);
sousTriFusion(A, q, r);
fusion(A, p, q, r);
}
}
void fusion(long * A, size_t p, size_t q, size_t r){
size_t n1 = q-p;
size_t n2 = r-q;
void fusion(long* A, const size_t p, const size_t q, const size_t r) {
long Ag[n1];
long Ad[n2];
// memset(Ag, 0, n1);
// memset(Ad, 0, n2);
int j =0;
for(size_t i = p; i<q; i++){
Ag[j] = A[i];
j++;
size_t n1 = q - p;
size_t n2 = r - q;
long* Ag = (long*) malloc(n1 * sizeof(long));
long* Ad = (long*) malloc(n2 * sizeof(long));
size_t cursor = 0;
for (size_t i = p; i < q; i++) {
Ag[cursor++] = A[i];
}
cursor = 0;
for (size_t i = q; i < r; i++) {
Ad[cursor++] = A[i];
}
size_t ind_g = 0;
size_t ind_d = 0;
size_t i = p;
while (i < r) {
if (ind_g == n1) {
A[i] = Ad[ind_d++];
}
j =0;
for(size_t i = q; i<r; i++){
Ad[j] = A[i];
j++;
else if (ind_d == n2) {
A[i] = Ag[ind_g++];
}
size_t indg = 0;
size_t indd = 0;
size_t i = p;
while (i < r){
if(indg == n1){
A[i] = Ad[indd];
indd++;
}
else if(indd == n2){
A[i] == Ag[indg];
indg++;
}
else if(Ag[indg] < Ad[indd]){
A[i] = Ag[indg];
indg++;
}
else{
A[i] = Ad[indd];
indd++;
}
i++;
else if (Ag[ind_g] < Ad[ind_d]) {
A[i] = Ag[ind_g++];
}
}
else {
A[i] = Ad[ind_d++];
}
i++;
}
}
void triFusion(long * A, size_t n){
sousTriFusion(A, 0, n);
......
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