begin process at 2012 05 27 20:40:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > TRI FUSION - MERGESORT

TRI FUSION - MERGESORT


 Information sur la source

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Expert Date de création :23/08/2004 Vu / téléchargé :12 485 / 142

Auteur : GRenard

Ecrire un message privé
Site perso
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Tri par fusion - MergeSort
Prend un tableau et le sépare en 2. Ensuite prend chaque tableau et separe ceux-ci encore en 2. Jusqu'à ce qu'il ne reste qu'un seul élément.
Ensuite, avec chaque petit tableau de 1 on refait le gros tableau en comparant à chaque fois chaque élément.
Pour mieux comprendre, il vous faut un dessin ! Cherchez sur Google : tri fusion.
La complexité de cet algorithme est de O(n log n).

Ce script a été réalisé avec 2 autres coéquipiers en C, mais il a été transféré en PHP par Jean-Sébastien Goupil

Difficulté : Fonction Récursive
Compatible PHP4, PHP5

Source

  • <?php
  • //////////////////////////////////////////////////////////////////////
  • // fusion.php
  • //--------------------------------------------------------------------
  • //
  • // Tri par fusion - MergeSort
  • // Prend un tableau et le sépare en 2. Ensuite prend chaque tableau
  • // et separe ceux-ci encore en 2. Jusqu'à ce qu'il ne reste qu'un seul
  • // élément.
  • // Ensuite, avec chaque petit tableau de 1 on refait le gros tableau
  • // en comparant à chaque fois chaque élément.
  • // Pour mieux comprendre, il vous faut un dessin ! Cherchez sur Google
  • // tri fusion.
  • // La complexité de cet algorithme est de O(n log n)
  • //
  • // Ce script a été réalisé avec 2 autres coéquipiers en C
  • // mais il a été transféré en PHP par Jean-Sébastien Goupil
  • //
  • //--------------------------------------------------------------------
  • // Revision History
  • // V1.00 23 aug 2004 Jean-Sebastien Goupil
  • //--------------------------------------------------------------------
  • // Copyright (C) Jean-Sebastien Goupil
  • // http://other.lookstrike.com/
  • //--------------------------------------------------------------------
  • //////////////////////////////////////////////////////////////////////
  • function triFusion ( &$tab ) {
  • if( count( $tab ) <= 1 ) return;
  • else {
  • $tab1 = array();
  • $tab2 = array();
  • // Répartie les information dans 2 tableaux différent
  • for( $i = 0; $i < count( $tab ); $i++) {
  • if( $i < ( count( $tab ) ) / 2 )
  • $tab1[] = $tab[ $i ];
  • else
  • $tab2[] = $tab[ $i ];
  • }
  • // Appel la fonction tri récursivement
  • triFusion( $tab1 );
  • triFusion( $tab2 );
  • // Fusionne les petits tableaux en plus grand
  • fusionner( $tab1, $tab2, $tab );
  • }
  • }
  • function fusionner ( $tab1, $tab2, &$tab ) {
  • $i = 0;
  • $i1 = $i2 = 0;
  • // Fusionne les petits tableaux dans le plus grand
  • while( $i1 < count( $tab1 ) && $i2 < count( $tab2 ) ) {
  • if( $tab1[ $i1 ] < $tab2[ $i2 ] ) // On compare ici
  • $tab[ $i ] = $tab1[ $i1++ ];
  • else
  • $tab[ $i ] = $tab2[ $i2++ ];
  • $i++;
  • }
  • // S'il reste des éléments dans un des 2 tableaux mais pas dans l'autre
  • while( $i1 < count( $tab1 ) ) {
  • $tab[ $i ] = $tab1[ $i1++ ];
  • $i++;
  • }
  • while( $i2 < count( $tab2 ) ) {
  • $tab[ $i ] = $tab2[ $i2++ ];
  • $i++;
  • }
  • }
  • $a = split(' ','Voici un tri par fusion !');
  • triFusion ( $a );
  • print_r($a);
  • ?>
<?php
//////////////////////////////////////////////////////////////////////
// fusion.php
//--------------------------------------------------------------------
//
// Tri par fusion - MergeSort
// Prend un tableau et le sépare en 2. Ensuite prend chaque tableau
// et separe ceux-ci encore en 2. Jusqu'à ce qu'il ne reste qu'un seul
// élément.
// Ensuite, avec chaque petit tableau de 1 on refait le gros tableau
// en comparant à chaque fois chaque élément.
// Pour mieux comprendre, il vous faut un dessin ! Cherchez sur Google
// tri fusion.
// La complexité de cet algorithme est de O(n log n)
//
// Ce script a été réalisé avec 2 autres coéquipiers en C
// mais il a été transféré en PHP par Jean-Sébastien Goupil
//
//--------------------------------------------------------------------
// Revision History
// V1.00	23 aug	2004	Jean-Sebastien Goupil
//--------------------------------------------------------------------
// Copyright (C) Jean-Sebastien Goupil
// http://other.lookstrike.com/
//--------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////
function triFusion ( &$tab ) {
	 if( count( $tab ) <= 1 ) return;
	 else {
		$tab1 = array();
		$tab2 = array();

		// Répartie les information dans 2 tableaux différent
		for( $i = 0; $i < count( $tab ); $i++) {
			if( $i < ( count( $tab ) ) / 2 )
				$tab1[] = $tab[ $i ];
			else
				$tab2[] = $tab[ $i ];
		}

		// Appel la fonction tri récursivement
		triFusion( $tab1 );
		triFusion( $tab2 );

		// Fusionne les petits tableaux en plus grand
		fusionner( $tab1, $tab2, $tab );
	}
}

function fusionner ( $tab1, $tab2, &$tab ) {
	$i = 0;
	$i1 = $i2 = 0;
	// Fusionne les petits tableaux dans le plus grand
	while( $i1 < count( $tab1 ) && $i2 < count( $tab2 ) ) {
		if( $tab1[ $i1 ] < $tab2[ $i2 ] ) // On compare ici
			$tab[ $i ] = $tab1[ $i1++ ];
		else
			$tab[ $i ] = $tab2[ $i2++ ];
		$i++;
	}

	// S'il reste des éléments dans un des 2 tableaux mais pas dans l'autre
	while( $i1 < count( $tab1 ) ) {
		$tab[ $i ] = $tab1[ $i1++ ];
		$i++;
	}
	while( $i2 < count( $tab2 ) ) {
		$tab[ $i ] = $tab2[ $i2++ ];
		$i++;
	}
}

$a = split(' ','Voici un tri par fusion !');
triFusion ( $a );
print_r($a);
?>

 Conclusion

Pour ceux qui disent que ca existe déjà en fonction directement en PHP eh bien tant mieux pour vous utilisez-la ! mais avec celle-ci, vous pouvez personnaliser par exemple plusieurs tableaux et la modifier à votre guise !

La ligne :
if( $tab1[ $i1 ] < $tab2[ $i2 ] ) // On compare ici
Vous pouvez la modifier et utiliser un strcmp ou tout autre de ressemblance :)
Mais PHP est intelligent donc < fonctionne aussi pour les chaines de caractères !

 Fichier Zip

Les Membres Club peuvent 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

Source avec Zip Source avec une capture LECTURE/ÉCRITURE DE TAGS ID3 VERSION 1 ET VERSION 2
Source avec Zip GÉRER LES ÉCHAPPEMENTS DE CARACTÈRES SUR TABLEAUX MULTIDIMEN...
Source avec Zip Source avec une capture PROJECT SELECTOR (SÉLECTION FACILE DE PROJET AVEC APACHE) ET...
Source avec Zip Source avec une capture STATISTIQUES DE VOTRE PROJET (NOMBRE DE DOSSIERS, FICHIERS, ...
Source avec Zip Source avec une capture AFFICHAGE TABLEAU AVEC TEMPLATE CLASSE

 Sources de la même categorie

EXEMPLE D'APPLICATION DE L'ALGORITHME DE DIJKSTRA EN PHP par philtr8
CLEF POUR EAN 13 ET 14 par RaftY
FONCTION DE CALCUL DU NOMBRE DE DUEL UNIQUE POUR UN NOMBRE N... par mtrix000
Source avec Zip Source avec une capture TRIANGLE DE PASCAL ET SON ÉQUATION par vendeeHdLR89
Source avec Zip CONVERTISSEUR LAMBERT2 ÉTENDU EN COORDONNÉE GÉOGRAPHIQUE (LO... par varfendell

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales