|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
TRI TABLEAU D'INTEGER PAR DICHOTOMIE, MAJ
Information sur la source
Description
Cette source corrige un problème lié au zéro, et prend acte des critiques reçues par la première version.
Source
- /*
- * PROJET : TriDicho AUTEUR : Alexandre Alcuyet DATE : 27/09/2008
- * Trier un tableau par dichotomie.
- * Le tri par dichotomie est un tri très efficace qui consiste
- * à éliminer successivement la motié des possibilités restantes,
- * jusqu'à parvenir au résultat.
- * Ce code n'a qu'un intérêt pédagogique, au titre d'algorithme car
- * l'API contient déjà de nombreuses solutions pour trier. Il
- * n'est pas question ici de trier des Collections mais des entiers,
- * mais libre à vous d'adapter le code.
- */
- import java.io.IOException;
- import java.lang.Integer;
-
- public class Main {
-
- public static void main(String args[]) throws IOException {
-
- Integer[] tnb = {
- Integer.valueOf(0), Integer.valueOf(54),
- Integer.valueOf(2), Integer.valueOf(321326),
- Integer.valueOf(1255), Integer.valueOf(10128),
- Integer.valueOf(65), Integer.valueOf(4),
- Integer.valueOf(101254), Integer.valueOf(4),
- Integer.valueOf(10), Integer.valueOf(5),
- Integer.valueOf(3), Integer.valueOf(1),
- Integer.valueOf(8) };
-
- affichetableau(tnb);
- tnb = TriDicho.trier(tnb);
- affichetableau(tnb);
- System.exit(0);
- }
-
- public static void affichetableau(Object tab[])
- throws IOException {
-
- for ( int i=0; i<tab.length-1; i++)
- System.out.format("%s - ", tab[i].toString());
-
- System.out.format("%s%n",tab[tab.length-1].toString());
- }
- }
-
- class TriDicho {
-
- public static Integer[] trier(Integer tab1[])
- throws IOException {
-
- int debut = 0;
- int fin = 0;
- int pos = 0;
- Integer[] tab2 = new Integer[tab1.length];
-
- for ( int i=0; i<tab2.length; i++) {
-
- pos = rechercheposition(tab1[i].intValue(),
- tab2, debut, fin);
-
- fin = i;
- insertion(tab1[i].intValue(), tab2, pos);
- };
-
- return tab2;
- }
-
- private static void insertion( int val, Integer tab[], int pos)
- throws IOException {
-
- int zr;
-
- for ( int i=tab.length-2; i>pos-1 ; i-- ) {
-
- zr =
- (tab[i] == null) ? 0 : tab[i].intValue() ;
-
- if ( pos != i )
- tab[i] = tab[i-1] ;
-
- else
- tab[i] = val ;
-
- tab[i+1] = zr;
- };
- }
-
- private static int round(double nb) throws IOException {
-
- int monint = (int)nb;
- double mondouble = (double)monint;
-
- if ( mondouble != nb)
- return (int)nb+1 ;
-
- return (int)nb;
- }
-
- private static int rechercheposition(int val, Integer tab[],
- int debut, int fin) throws IOException {
-
- int milieu;
- do {
- milieu = round((double)((double)debut+(double)fin)/2);
-
- /*
- * si la valeur du tableau est null et que la fin (nombre
- * le plus grand connu) est 0 retourne 0.
- * Dans le cas du premier nombre inscrit au tableau
- */
- //System.out.println("valeur: "+tab[0].intValue());
- if ( (tab[milieu] == null) && (fin==0) )
- return 0 ;
-
- /*
- * si la valeur est superieure et qu'il n'y a plus
- * d'écart entre fin et debut retourne fin+1
- */
- if ( (tab[milieu].intValue() <= val) && (debut == fin) )
- return fin+1 ;
-
- /*
- * si la valeur est inferieure et qu'il n'y a plus d'ecart
- * entre fin et debut retourne fin+1
- */
- if ( (tab[milieu].intValue() > val) && (debut == fin) )
- return fin ;
-
- /*
- * quand la valeur du tableau coordonee milieu est
- * superieure a la valeur a entrer
- */
- if ( tab[milieu].intValue() > val ) {
-
- /*
- * si il ne reste que deux cases,
- * alors la deuxieme est inutile
- */
- if (fin-debut == 1)
- fin = fin-1 ;
-
- // sinon fin est initialise avec milieu
- else
- fin = milieu;
- }
-
- /*
- * si la valeur du tableau a la coordonee de milieu
- * est inferieure ou egale a la valeur a entrer,
- * alors on oublie tout ce qui se trouve avant
- */
- if ( tab[milieu].intValue() <= val )
- debut = milieu ;
- }
-
- while ( milieu != -1 );
- return 0;
- }
- }
/*
* PROJET : TriDicho AUTEUR : Alexandre Alcuyet DATE : 27/09/2008
* Trier un tableau par dichotomie.
* Le tri par dichotomie est un tri très efficace qui consiste
* à éliminer successivement la motié des possibilités restantes,
* jusqu'à parvenir au résultat.
* Ce code n'a qu'un intérêt pédagogique, au titre d'algorithme car
* l'API contient déjà de nombreuses solutions pour trier. Il
* n'est pas question ici de trier des Collections mais des entiers,
* mais libre à vous d'adapter le code.
*/
import java.io.IOException;
import java.lang.Integer;
public class Main {
public static void main(String args[]) throws IOException {
Integer[] tnb = {
Integer.valueOf(0), Integer.valueOf(54),
Integer.valueOf(2), Integer.valueOf(321326),
Integer.valueOf(1255), Integer.valueOf(10128),
Integer.valueOf(65), Integer.valueOf(4),
Integer.valueOf(101254), Integer.valueOf(4),
Integer.valueOf(10), Integer.valueOf(5),
Integer.valueOf(3), Integer.valueOf(1),
Integer.valueOf(8) };
affichetableau(tnb);
tnb = TriDicho.trier(tnb);
affichetableau(tnb);
System.exit(0);
}
public static void affichetableau(Object tab[])
throws IOException {
for ( int i=0; i<tab.length-1; i++)
System.out.format("%s - ", tab[i].toString());
System.out.format("%s%n",tab[tab.length-1].toString());
}
}
class TriDicho {
public static Integer[] trier(Integer tab1[])
throws IOException {
int debut = 0;
int fin = 0;
int pos = 0;
Integer[] tab2 = new Integer[tab1.length];
for ( int i=0; i<tab2.length; i++) {
pos = rechercheposition(tab1[i].intValue(),
tab2, debut, fin);
fin = i;
insertion(tab1[i].intValue(), tab2, pos);
};
return tab2;
}
private static void insertion( int val, Integer tab[], int pos)
throws IOException {
int zr;
for ( int i=tab.length-2; i>pos-1 ; i-- ) {
zr =
(tab[i] == null) ? 0 : tab[i].intValue() ;
if ( pos != i )
tab[i] = tab[i-1] ;
else
tab[i] = val ;
tab[i+1] = zr;
};
}
private static int round(double nb) throws IOException {
int monint = (int)nb;
double mondouble = (double)monint;
if ( mondouble != nb)
return (int)nb+1 ;
return (int)nb;
}
private static int rechercheposition(int val, Integer tab[],
int debut, int fin) throws IOException {
int milieu;
do {
milieu = round((double)((double)debut+(double)fin)/2);
/*
* si la valeur du tableau est null et que la fin (nombre
* le plus grand connu) est 0 retourne 0.
* Dans le cas du premier nombre inscrit au tableau
*/
//System.out.println("valeur: "+tab[0].intValue());
if ( (tab[milieu] == null) && (fin==0) )
return 0 ;
/*
* si la valeur est superieure et qu'il n'y a plus
* d'écart entre fin et debut retourne fin+1
*/
if ( (tab[milieu].intValue() <= val) && (debut == fin) )
return fin+1 ;
/*
* si la valeur est inferieure et qu'il n'y a plus d'ecart
* entre fin et debut retourne fin+1
*/
if ( (tab[milieu].intValue() > val) && (debut == fin) )
return fin ;
/*
* quand la valeur du tableau coordonee milieu est
* superieure a la valeur a entrer
*/
if ( tab[milieu].intValue() > val ) {
/*
* si il ne reste que deux cases,
* alors la deuxieme est inutile
*/
if (fin-debut == 1)
fin = fin-1 ;
// sinon fin est initialise avec milieu
else
fin = milieu;
}
/*
* si la valeur du tableau a la coordonee de milieu
* est inferieure ou egale a la valeur a entrer,
* alors on oublie tout ce qui se trouve avant
*/
if ( tab[milieu].intValue() <= val )
debut = milieu ;
}
while ( milieu != -1 );
return 0;
}
}
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
ordonner jslider [ par sanpexos ]
salut tout le mondeCe que j'aimerais faire c'est afficher quelque chose la première fois que l'on relâche le bouton de la jslider.Et défaire ce que l'
tri de fichier [ par estbn04 ]
bonjour!voila un petit probleme...j'ai effectuer un listing de tous les fichiers d'un répertoire et de ses sous repertoires..seulement j'aimerais pouv
tri de fichier [ par estbn04 ]
bonjour!voila un petit probleme...j'ai effectuer un listing de tous les fichiers d'un répertoire et de ses sous repertoires..seulement j'aimerais pouv
Recherche d'algorithme de table de hachage [ par jpegg ]
Bonsoir,Je recherche un code source me permettant de coder un programme en Java similaire a gperf. Si quelqu un a une solution, ca m arrangerait bien.
Création tableau 2 dimensions + tri [DEBUTANT !!] [ par ctof3552 ]
slt !je souhaite trier un tableau de vecteurs sur le 2eme élément du vecteur...comment puis je faireex: mon tablo est :[RP125, 38][RP621, 79][RP268, 3
Probleme de vecteur et le tri [ par niicker ]
Salujt j'ai besoin de trié des vecteur int et des vecteur par ordre alphabetique j'aimerais avoir la ligne de code pour faire seulement le trie
algorithme de l'ombre portée [ par EulaSky ]
salut tout le monde!je suis en train de programmer un peu de filtres en java mais je réussi pas à trouver l'algorithme de l'ombre portée. cad insérer
Algorithme de la rotation d'une image [ par EulaSky ]
voila je cherche l'algorithme de la rotation d'images... je veux pas utiliser celui fourni dans les librairies de java... vous avez pas un petit lien?
Probleme ResultSet et tri [ par cocof ]
Je requête dans une base Oracle) qui utilise un tri de type Ascii ) avec une clause orderByJe lis le résultat de la requête avec un resultSet qui me
methode tri alphabetique [ par javateux ]
bonjour, quelqu'un connait-il une methode permettant de trier des string par ordre alphabetique?Merci d'avance
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version

LG KP501
Entre 9€ et 159€
|