Tri des listes de données présente l'un des problèmes les plus difficiles pour les programmeurs informatiques , car il est difficile de conceptualiser et mettre en œuvre des algorithmes de tri efficace des langages de programmation . Le tri nécessite la copie considérable , le déplacement et la lecture de données pour travailler . En conséquence , les programmeurs se concentrent sur le développement d'algorithmes de tri efficace et générique. L'un d'eux , le tri par fusion , travaille en divisant une liste de valeurs , encore et récursive de «diviser et conquérir » le problème. Depuis le tri par fusion est conçu comme une solution générique , la plupart des langages , dont Java , ont les moyens de le mettre en œuvre . Fusionner classe
Un tri par fusion prend une liste à trier et se divise de manière récursive la liste jusqu'à atteindre des valeurs simples, telles que des numéros individuels. Le tri se recombine ensuite les numéros dans l'ordre de tri , pour finalement revenir une liste triée . Une classe de tri de base en Java contiendra une liste à trier, et appeler une fonction principale fusionner le tri définit :
classe
Merge {
public int [] x ;
static void main ( string [] args ) {
publique x = [ 5, 6, 3, 4 , 7, 8 , 10, 2];
mergesort (x, 0, x . longueur -1); }}
Merge Trier fonction
dehors de la classe principale résidera une fonction de tri par fusion . Cette segments de fonction une plage de numéros à trier dans la liste. Initialement , cette gamme va représenter toute la liste , mais comme le tri par fusion continue , il faudra que la moitié de la liste jusqu'à atteindre entrées uniques . Ensuite, la fonction de tri par fusion sera recombiner les éléments dans de longues listes qui sont triés (Source 2):
publique vide mergesort (int faible , int salut ) {
if ( faible < salut ) {int milieu = ( bas + salut ) /2; mergesort ( bas , milieu) ; mergesort ( milieu + 1, salut ) ; fusion (faible, moyenne, salut );}}
< br > Basic fonction de fusion
La fonction de fusion combinera deux listes après leur tri. Si la fonction reçoit des éléments simples , il les commander. Sinon, il faudra deux listes distinctes , et selon le désir de l'ordre du programmateur dans l'ordre croissant ou décroissant : Photos
private void fusion ( int , int mi faibles , int salut ) {
< p > int [] copie = new int [ x.length -1] ;
//Copiez les deux parties dans le tableau des assistants for (int i = faible; i <= salut ; i + +) { copie [ i ] = x [i] ; }
int i = faible; int j = mi + 1; int k = faible; while ( i < = milieu && j < = salut ) {if ( copie [ i ] < = copie [ j]) {x [k] = copie [i] ; i + +; } else { x [k] = copie [j] ; j + + ;} k + +; } //copie du reste du côté gauche du tableau dans le tableau cible while ( i < = milieu ) { x [k] = copie [i] ; k + +; i + + ;} }
< br > Fusionner Trier Recurse
la fonction " mergesort " divise de manière récursive la liste. Premièrement, il divise la liste initiale de moitié pour chaque fois qu'il appelle lui-même de manière récursive. Lorsque la récursivité atteint un chiffre unique , la fonction revient en arrière alors et commence à l'ordre de la liste. Chaque fois que la fonction fait marche arrière à un appel de fonction précédente , il fusionne deux moitiés d'une petite liste , travaillant par la suite revenir à la liste complète. La fonction " merge " semble faire le gros du travail en organisant et en copiant les valeurs dans la liste, mais au cœur d'un tri par fusion est en fonction d'une simplicité trompeuse " mergesort " .
< Br > Photos