Skip to content
Snippets Groups Projects
Commit f4c8addc authored by LITIERE MALRIC's avatar LITIERE MALRIC
Browse files

TP1

parent 96cf9c01
Branches
No related merge requests found
all: main
main : tris.o utils.o main.c
gcc -o main -Wall utils.o tris.o -g main.c
tris.o : tris.c tris.h
gcc -c -Wall -g tris.c
utils.o : utils.c utils.h
gcc -o utils.o -c -g utils.c
clean :
rm *.o
TP1/main 0 → 100644
File added
#include <stdio.h>
#include <stdlib.h>
#include "tris.h"
#include "utils.h"
int main() {
printf("Tri Insertion: \n");
long* triIns = malloc(sizeof(long) * 100);
listeAlea(100,300);
affichertab(triIns,100);
triInsertion(triIns,100);
affichertab(triIns,100);
printf("Tri Rapide: \n");
long* triRap = listeAlea(100,300);
affichertab(triRap,100);
triRapide(triRap, 100);
affichertab(triRap,100);
printf("Tri Fusion: \n");
long* triFus = listeAlea(100,300);
affichertab(triFus,100);
triFusion(triFus, 100);
affichertab(triFus,100);
return 0;
}
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "tris.h"
void triInsertionDec(long* A, size_t n) {
for(size_t i = 1; i <= n-1; i++){
long cle = A[i];
size_t j = i - 1;
size_t ecriture=0;
while(j+1 >= j && A[j] > cle){
ecriture++;
A[j+1] = A[j];
j = j-1;
}
ecriture++;
A[j+1] = cle;
}
}
void triFusionDec(long* A, size_t size) {
sousTriFusionDec(A, 0, size);
}
void sousTriFusionDec(long* A, size_t first, size_t size) {
if(first+1 <size){ // p < r - 1
size_t middle = floor((first+size)/2);
sousTriFusionDec(A, first, middle);
sousTriFusionDec(A, middle, size);
fusionDec(A, first, middle, size);
}
}
void copySousTableDec(long* mainT, long* underT, size_t id, size_t size) {
for(size_t i = id; i < id+size; ++i) {
underT[i-id] = mainT[i];
}
}
void fusionDec(long* A, size_t first, size_t middle, size_t size) {
size_t n1 = middle - first; // Nb elem dans A[p , q] q exclu
size_t n2 = size - middle; // Nb elem dans A[q , r] r exclu
size_t indg = 0;
size_t indd = 0;
long* ag = malloc(sizeof(long) * n1);
long* ad = malloc(sizeof(long) * n2);
copySousTableDec(A, ag, first, n1);
copySousTableDec(A, ad, middle, n2);
int i = first;
while(i < size) {
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;
}
free(ag);
free(ad);
}
void triRapideDec(long* A, size_t n) {
sousTriRapideDec(A,0,n);
}
void sousTriRapideDec(long* A, size_t first, size_t size){
if(first+1 < size){
size_t middle = partitionDec(A,first,size);
sousTriRapideDec(A,first,middle);
sousTriRapideDec(A,middle+1,size);
}
}
size_t partitionDec(long* A, size_t first, size_t size) {
long pivot = A[size-1];
size_t i = first;
for(int j = first; j+2 <= size; j++){
if(A[j] <= pivot){
permuterDec(A,i,j);
i++;
}
}
permuterDec(A,i,size-1);
return i;
}
void permuterDec(long* A,size_t i,size_t j) {
long inter = A[i];
A[i] = A[j];
A[j] = inter;
}
#ifndef TRIS_H
#define TRIS_H
#include <stdint.h>
#include <stdlib.h>
void triInsertionDec(long* A, size_t n);
void triFusionDec(long* A, size_t size);
void sousTriFusionDec(long* A, size_t first, size_t size);
void fusionDec(long* A, size_t first, size_t middle, size_t size);
void triRapideDec(long* A, size_t n);
void sousTriRapideDec(long* A, size_t first, size_t size);
size_t partitionDec(long* A, size_t first, size_t size);
void permuterDec(long* A,size_t i,size_t j);
#endif //TRIS_H
\ No newline at end of file
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "tris.h"
void triInsertion(long* A, size_t n) {
for(size_t i = 1; i <= n-1; i++){
long cle = A[i];
size_t j = i - 1;
while(j+1 >= j && A[j] > cle){
A[j+1] = A[j];
j = j-1;
}
A[j+1] = cle;
}
}
void triFusion(long* A, size_t size) {
sousTriFusion(A, 0, size);
}
void sousTriFusion(long* A, size_t first, size_t size) {
if(first+1 <size){ // p < r - 1
size_t middle = floor((first+size)/2);
sousTriFusion(A, first, middle);
sousTriFusion(A, middle, size);
fusion(A, first, middle, size);
}
}
void copySousTable(long* mainT, long* underT, size_t id, size_t size) {
for(size_t i = id; i < id+size; ++i) {
underT[i-id] = mainT[i];
}
}
void fusion(long* A, size_t first, size_t middle, size_t size) {
size_t n1 = middle - first; // Nb elem dans A[p , q] q exclu
size_t n2 = size - middle; // Nb elem dans A[q , r] r exclu
size_t indg = 0;
size_t indd = 0;
long* ag = malloc(sizeof(long) * n1);
long* ad = malloc(sizeof(long) * n2);
copySousTable(A, ag, first, n1);
copySousTable(A, ad, middle, n2);
int i = first;
while(i < size) {
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;
}
free(ag);
free(ad);
}
void triRapide(long* A, size_t n) {
sousTriRapide(A,0,n);
}
void sousTriRapide(long* A, size_t first, size_t size){
if(first+1 < size){
size_t middle = partition(A,first,size);
sousTriRapide(A,first,middle);
sousTriRapide(A,middle+1,size);
}
}
size_t partition(long* A, size_t first, size_t size) {
long pivot = A[size-1];
size_t i = first;
for(int j = first; j+2 <= size; j++){
if(A[j] <= pivot){
permuter(A,i,j);
i++;
}
}
permuter(A,i,size-1);
return i;
}
void permuter(long* A,size_t i,size_t j) {
long inter = A[i];
A[i] = A[j];
A[j] = inter;
}
#ifndef TRIS_H
#define TRIS_H
#include <stdint.h>
#include <stdlib.h>
void triInsertion(long* A, size_t n);
void triFusion(long* A, size_t size);
void sousTriFusion(long* A, size_t first, size_t size);
void fusion(long* A, size_t first, size_t middle, size_t size);
void triRapide(long* A, size_t n);
void sousTriRapide(long* A, size_t first, size_t size);
size_t partition(long* A, size_t first, size_t size);
void permuter(long* A,size_t i,size_t j);
#endif //TRIS_H
File added
#include <stdio.h>
#include <stdlib.h>
#include "utils.h"
void affichertab(long* T, int s){
printf("[ ");
for(int i = 0; i < s-1; i++){
printf("%d , ",T[i]);
}
printf("%d ]\n",T[s-1]);
}
long* listeAlea(size_t longeur, size_t N){
long liste[longeur];
for(size_t i = 0; i < longeur; i++){
liste[i] = rand() % N;
}
return liste;
}
\ No newline at end of file
#include <stdio.h>
#include <stdlib.h>
void affichertab(long* T, int s);
long* listeAlea(size_t longeur, size_t N);
\ 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