Projets

test tri


// tableaux à trier distribution Inversée
int[] tableauI = { 
  18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
};
// tableaux à trier distribution Aléatoire
int[] tableauA = { 
7, 10, 6, 3, 8, 1, 14, 2, 9, 4, 5, 13, 18, 16, 17, 15, 12, 11
};
// Tableau trié
int[] tableauF = { 
  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
};
int[] tableau11 = new int[tableauA.length];
int[] tableau21 = new int[tableauA.length];   
int[] tableau31 = new int[tableauA.length];  
int[] tableau41 = new int[tableauA.length];
int[] tableau12 = new int[tableauA.length];
int[] tableau22 = new int[tableauA.length];   
int[] tableau32 = new int[tableauA.length];  
int[] tableau42 = new int[tableauA.length]; 
int k, k11, k21, k31, k41, k12, k22, k32, k42;
;


void setup()
{

  size(550, 250);
  background(255, 255, 255);
  frameRate(4);
  fond = loadImage("http://isn.codelab.info/site/assets/files/1084/fondtri.png");
  // variable d'incrémentation pour un tri par étapes
  k=1;
  // Initialisation des tableaux
  copierTableau(tableauA, tableau11);
  copierTableau(tableauA, tableau21);
  copierTableau(tableauA, tableau31);
  copierTableau(tableauA, tableau41);
  copierTableau(tableauI, tableau12);
  copierTableau(tableauI, tableau22);
  copierTableau(tableauI, tableau32);
  copierTableau(tableauI, tableau42);

  println("Programme démarré");
}

void draw() 
{
  background(255, 255, 255);
   image(fond,0,0);  
  // Dessin des tableaux
  dessinerTableau(tableauA, 50, 50, 237, 28, 36);
  dessinerTableau(tableau11, 150, 50, 255, 174, 201);
  dessinerTableau(tableau21, 250, 50, 255, 201, 14);
  dessinerTableau(tableau31, 350, 50, 0, 162, 232);
  dessinerTableau(tableauF, 450, 50, 34, 177, 76);
  
  dessinerTableau(tableauI, 50, 150, 237, 28, 36);
  dessinerTableau(tableau12, 150, 150, 255, 174, 201);
  dessinerTableau(tableau22, 250, 150, 255, 201, 14);
  dessinerTableau(tableau32, 350, 150, 0, 162, 232);
  dessinerTableau(tableauF, 450, 150, 34, 177, 76);
  // debug
  // afficherTableau(tableau11);
}

void mouseClicked () 
{
  println("etape:"+k);

  // etape tri à Bulles A
  if (!triOk(tableauF, tableau11))
  {
    triBullesInc(tableau11);
    k11=k;
  }
  else
  {
    println("Fin tri à Bulles A étape:"+k11);
  }
  // etape tri Insertion A
  if (!triOk(tableauF, tableau21))
  {
    triInsertionInc(tableau21, k);
    k21=k;
  }
  else
  {
    println("Fin tri Insertion A étape:"+k21);
  }
  // etape tri Selection A
  if (!triOk(tableauF, tableau31))
  {
    triSelectionInc(tableau31, k-1);
    k31=k;
  }
  else
  {
    println("Fin tri Selection A étape:"+k31);
  }

  // etape tri à Bulles I
  if (!triOk(tableauF, tableau12))
  {
    triBullesInc(tableau12);
    k12=k;
  }
  else
  {
    println("Fin tri à Bulles I étape:"+k12);
  }
  // etape tri Insertion I
  if (!triOk(tableauF, tableau22))
  {
    triInsertionInc(tableau22, k);
    k22=k;
  }
  else
  {
    println("Fin tri Insertion I étape:"+k22);
  }
  // etape tri Selection I
  if (!triOk(tableauF, tableau32))
  {
    triSelectionInc(tableau32, k-1);
    k32=k;
  }
  else
  {
    println("Fin tri Selection I étape:"+k32);
  }

  k++;
}

// copier un tableau
void copierTableau(int table0[], int table[])
{
  int i;
  for (i=0;i < table0.length;i++) 
  { 
    table[i] = table0[i];
  }
}

// copier un tableau
boolean triOk(int table0[], int table[])
{
  int i;
  boolean tableauOk;

  tableauOk = true;
  for (i=table0.length-1;i>0;i--) 
  { 
    if (table[i] != table0[i])
    {
      tableauOk = false;
      break;
    }
  }
  return tableauOk;
}

// fonction de permutation
void swap(int tableau[], int i, int j) 
{
  int tampon;
  tampon = tableau[i];
  tableau[i] = tableau[j];
  tableau[j] = tampon;
}

// Tri à bulles
void triBullesInc(int tableau[]) 
{
  int i, j;
  boolean sorted = false;

  for (i=0;i < tableau.length-1;i++) 
  {
    if (tableau[i] > tableau[i+1]) 
    {  
      swap(tableau, i, i+1);
    }
  }
}

// Tri insertion
void triInsertionInc(int tableau[], int i) { 
  int j;

  for (j=i; j>0 && (tableau[j] < tableau[j-1]); j--) 
  {
    swap(tableau, j, j-1);
  }
}

// Tri sélection
void triSelectionInc(int tableau[], int i)
{
  int j, k;
  k=i;

  for (j=i+1;j < tableau.length;j++) 
  {
    if (tableau[j] < tableau[k]) 
    {
      k = j;
    }
  }
  swap(tableau, i, k);
}

// Afficher les valeurs d'un tableau
void afficherTableau(int tableau[])
{
  int i=0;
  for (i=0;i < tableau.length;i++) {
    print(tableau[i] + ",");
  }
  // retour à la ligne
  println();
}

// Dessiner un tableau
void dessinerTableau(int tableau[], int x, int y, int r, int g, int b)
{
  int longueurBarre = 10;

  // largeur des barres
  int largeurBarre = 5;
  int i=0;

  // dessin des barres
  for (i=0;i < tableau.length;i++) 
  {
    longueurBarre = tableau[i]*5;
    fill (r, g, b);
    noStroke();
    rect(x, y+(largeurBarre*i), longueurBarre, largeurBarre-1);
  }
}