Maison  >  Article  >  interface Web  >  Explication détaillée du tri par fusion en JavaScript

Explication détaillée du tri par fusion en JavaScript

韦小宝
韦小宝original
2018-03-14 14:14:201348parcourir

Cet article parle du tri par fusion en JavaScript. Si vous ne connaissez pas le tri par fusion en JavaScript ou si vous êtes intéressé par le tri par fusion en JavaScript, jetons un coup d'œil à cet article. Bon, sans plus tarder, passons à cela. le point. Bar

Tri par fusion en JavaScript

En tant qu'application algorithmique typique de l'idée diviser pour régner, la mise en œuvre de la fusion le tri se compose de deux méthodes :

1. Récursivité descendante (toutes les méthodes récursives peuvent être réécrites par itération, il existe donc la deuxième méthode)

2. Itération ascendante

Dans "Description de la structure des données et de l'algorithme JavaScript", l'auteur donne une méthode d'itération ascendante. Mais pour la méthode récursive, l'auteur pense :

However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle.
然而,在 JavaScript 中这种方式不太可行,因为这个算法的递归深度对它来讲太深了。

Pour être honnête, je ne comprends pas bien cette phrase. Cela signifie-t-il que la mémoire du compilateur JavaScript est trop petite et que la récursivité est trop profonde, ce qui peut facilement provoquer un débordement de mémoire ? J'espère que quelqu'un pourra me donner quelques conseils.

Comme le tri par sélection, les performances du tri par fusion ne sont pas affectées par les données d'entrée, mais les performances sont bien meilleures que celles du tri par sélection car la complexité temporelle est toujours O(n log n). Le prix est un espace mémoire supplémentaire.

Démonstration d'animation de tri par fusion

Explication détaillée du tri par fusion en JavaScript

Implémentation du code JavaScript de tri par fusion :

function mergeSort(arr) {  //采用自上而下的递归方法  
   var len = arr.length;  
   if(len < 2) {  
       return arr;  
   }  
   var middle = Math.floor(len / 2),  
       left = arr.slice(0, middle),  
       right = arr.slice(middle);  
   return merge(mergeSort(left), mergeSort(right));}function merge(left, right){  
   var result = [];  
  
   while (left.length && right.length) {  
       if (left[0] <= right[0]) {  
           result.push(left.shift());  
       } else {  
           result.push(right.shift());  
       }  
   }  
  
   while (left.length)  
       result.push(left.shift());  
  
   while (right.length)  
       result.push(right.shift());  
  
   return result;}

Ce qui précède est tout le contenu de cet article, Si vous n’y connaissez pas encore grand-chose, vous pouvez facilement le maîtriser en mettant davantage en œuvre les deux côtés !

Recommandations associées :

Question intéressante JavaScript : fusionner le tri des listes liées

JavaScript implémente l'insertion de listes chaînées tri et tri par fusion de liste chaînée

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn