Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "tri_insertion.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;
}
}
\ No newline at end of file
#ifndef TRIS_I
#define TRIS_I
#include <stdint.h>
#include <stdlib.h>
void triInsertion(long* A, size_t n);
#endif //TRIS_H
\ No newline at end of file
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "tri_rapide.h"
void triRapide(long* A, size_t n, int version) {
sousTriRapide(A,0,n, version);
}
void sousTriRapide(long* A, size_t first, size_t size, int version){
if(first+1 < size){
size_t middle = partition(A,first,size, version);
sousTriRapide(A,first,middle, version);
sousTriRapide(A,middle+1,size, version);
}
}
size_t partition(long* A, size_t first, size_t size, int version) {
//long middle = (size-1) / 2;
//long pivot = A[middle];
long pivot = A[size-1];
size_t i = first;
for(int j = first; j+2 <= size; j++){
if(A[j] <= pivot) {
// Version 1: optimisation sur les tableaux ranges
if(version == 1) {
// Si i = j, pas besoin de permuter
if(i != j ) {
permuter(A,i,j);
}
}
// Version 0: celle de base
else {
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_R
#define TRIS_R
#include <stdint.h>
#include <stdlib.h>
void triRapide(long* A, size_t n, int version);
void sousTriRapide(long* A, size_t first, size_t size, int version);
size_t partition(long* A, size_t first, size_t size , int version);
void permuter(long* A,size_t i,size_t j);
#endif //TRIS_H
#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]);
}
void genTab(long *T, long taille, char type, long MAX)
{
int middle = (taille / 2);
switch (type)
{
case 'a':
//Tableau Aleatoire
for (long i = 0; i < taille; ++i)
{
T[i] = rand() % MAX;
}
break;
case 'r':
//Tableau Rangé
for (long i = 0; i < taille; ++i)
{
T[i] = i;
}
break;
case 'i':
//Tableau Rangé Inversé
for (long i = 0; i < taille; ++i)
{
T[i] = taille - i;
}
break;
case 'c':
//Tableau Constant
for (long i = 0; i < taille; ++i)
{
T[i] = 0;
}
break;
case 'm':
//Tableau Trie a moitie
for (long i = 0; i < middle; ++i)
{
T[i] = i;
}
for (long i = middle; i < taille; ++i)
{
T[i] = rand() % MAX;
}
break;
default:
break;
}
}
#include <stdio.h>
#include <stdlib.h>
void affichertab(long* T, int s);
void genTab(long *T, long taille, char type, long MAX);