« Implémentation d'algorithmes classiques/Algorithmes de tri/Tri de Shell » : différence entre les versions

Contenu supprimé Contenu ajouté
Romainhk (discussion | contributions)
Page créée avec « === GFA BASIC === <source lang=vb> PROCEDURE Tri_Shell(N As Int, ByRef E() As Int) Local Int D, LIMITE, INTERVERSION, J, I D = Div(N, 2) ' D = Distan... »
 
Romainhk (discussion | contributions)
Aucun résumé des modifications
Ligne 1 :
=== GFA [[GFAProgrammation Basic|BASIC]] ===
<source lang=vb>
PROCEDURE Tri_Shell(N As Int, ByRef E() As Int)
Ligne 20 :
Div D, 2 ' Sinon on divise la distance par 2 et on recommence
Loop While D > 0 ' sauf si plus possible de diminuer la distance
Return
</source>
 
=== [[CProgrammation (langage)C|C]] ===
<source lang=c>
/*
Ligne 61 ⟶ 62 :
</source>
 
=== [[C_plus_plusProgrammation C++|C++]] ===
<source lang=cpp>
 
Ligne 94 ⟶ 95 :
</source>
 
=== [[PascalProgrammation (langage)C sharp|PascalC#]] ===
<source lang=csharp>
using System;
public class ShellSorter
{
public void Sort(int [] list)
 
 
{
int inc;
for(inc=1;inc<=list.Length/9;inc=3*inc+1);
for(;inc>0;inc/=3)
{
for(int i=inc+1;i<=list.Length;i+=inc)
{
int t=list[i-1];
int j=i;
while((j>inc)&&(list[j-inc-1]>t))
{
list[j-1]=list[j-inc-1];
j-=inc;
}
list[j-1]=t;
}
}
}
}
public class MainClass
{
public static void Main()
{
int[] iArrary=new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
ShellSorter sh=new ShellSorter();
sh.Sort(iArrary);
for(int m=0;m<=13;m++)
Console.WriteLine("{0}",iArrary[m]);
}
}
</source>
 
== [[Programmation Java|Java]] ==
<source lang=java>
public static void triDeShell(int [] tab,int tailleLogique){
int pas = 1;
while( pas < tailleLogique/9) {
pas = pas*3 + 1; // on fixe le premier pas
}
while (pas > 0) { // boucle sur les différents pas
for(int série = 0; série <= pas-1; série ++) { // boucle sur les séries
int positionEltAInsérer = série + pas; // tri par insertion
 
while(positionEltAInsérer < tailleLogique) {
int élémentAInsérer = tab[positionEltAInsérer];
int posElemComparé = positionEltAInsérer - pas;
 
while ((posElemComparé >= 0) && (élémentAInsérer < tab[posElemComparé])) {
tab[posElemComparé + pas] = tab[posElemComparé];
posElemComparé -= pas;
}
tab [posElemComparé + pas] = élémentAInsérer;
positionEltAInsérer += pas;
}
}
pas = pas/3;
}
}
</source>
 
== [[Programmation Pascal|Pascal]] ==
Implémention du tri Shell en Pascal (par ordre croissant).
<source lang=pascal>
Ligne 133 ⟶ 202 :
end;
end;
</source>
 
=== [[Java (langage)|Java]] ===
<source lang=java>
public static void triDeShell(int [] tab,int tailleLogique){
int pas = 1;
while( pas < tailleLogique/9) {
pas = pas*3 + 1; // on fixe le premier pas
}
while (pas > 0) { // boucle sur les différents pas
for(int série = 0; série <= pas-1; série ++) { // boucle sur les séries
int positionEltAInsérer = série + pas; // tri par insertion
 
while(positionEltAInsérer < tailleLogique) {
int élémentAInsérer = tab[positionEltAInsérer];
int posElemComparé = positionEltAInsérer - pas;
 
while ((posElemComparé >= 0) && (élémentAInsérer < tab[posElemComparé])) {
tab[posElemComparé + pas] = tab[posElemComparé];
posElemComparé -= pas;
}
tab [posElemComparé + pas] = élémentAInsérer;
positionEltAInsérer += pas;
}
}
pas = pas/3;
}
}
</source>
 
=== [[C sharp|C#]]===
<source lang=csharp>
using System;
public class ShellSorter
{
public void Sort(int [] list)
 
 
{
int inc;
for(inc=1;inc<=list.Length/9;inc=3*inc+1);
for(;inc>0;inc/=3)
{
for(int i=inc+1;i<=list.Length;i+=inc)
{
int t=list[i-1];
int j=i;
while((j>inc)&&(list[j-inc-1]>t))
{
list[j-1]=list[j-inc-1];
j-=inc;
}
list[j-1]=t;
}
}
}
}
public class MainClass
{
public static void Main()
{
int[] iArrary=new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
ShellSorter sh=new ShellSorter();
sh.Sort(iArrary);
for(int m=0;m<=13;m++)
Console.WriteLine("{0}",iArrary[m]);
}
}
</source>