Maison  >  Article  >  développement back-end  >  Une explication de la façon d'implémenter le tri par base en PHP

Une explication de la façon d'implémenter le tri par base en PHP

jacklove
jackloveoriginal
2018-07-07 17:47:191610parcourir

Cet article présente principalement la méthode d'implémentation du tri radix en PHP, et analyse les principes, les méthodes de mise en œuvre et les techniques de fonctionnement associées du tri radix sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

Ceci. L'article décrit des exemples de PHP Comment implémenter le tri par base. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

Le tri cardinal est basé sur la valeur de chaque mot-clé dans le mot-clé et est trié en effectuant plusieurs passes de « distribution » et de « collecte » sur les N éléments triés.

Vous souhaitez utiliser un exemple spécifique pour montrer comment le tri par base est effectué.

Supposons qu'une séquence initiale soit : R {50, 123, 543, 187, 49, 30, 0, 2, 11, 100}.

Nous savons que la base de chaque chiffre de tout nombre arabe est représentée par 0~9.

Donc, autant considérer 0~9 comme 10 seaux.

Nous classons d'abord en fonction des nombres à un chiffre de la séquence et les divisons dans des catégories spécifiées. Par exemple : R[0] = 50, le chiffre unique est 0, stockez ce numéro dans le compartiment numéroté 0.

Après classement, nous retirons tous les numéros de chaque seau dans l'ordre du numéro 0 au numéro 9.

À l'heure actuelle, la séquence obtenue est une séquence avec une tendance croissante à un chiffre.

Triés par chiffres : {50, 30, 0, 100, 11, 2, 123, 543, 187, 49}.

Ensuite, vous pouvez trier les chiffres des dizaines et des centaines de cette manière, et enfin vous obtiendrez la séquence triée.

<?php
/**基数排序**/
/*
* 获取第几位上的数字
*
*百位数 = 2345%1000/100
*/
function getN($num,$N){
  $value = 10;
  for($i=1;$i<$N;$i++){
    $value = $value * 10;
  }
  $M = (int)(($num % $value /($value/10)));
  return $M;
}
/*
*/
function paixu($arr)
{
  $flag = 1;//该次位数上是否全为0标志位,全为0 flag=0
  for($M=1;$flag!=0;$M++)
  {
    $flag = 0;
    if($M > 1){
      $m = 0;
      for($j=0;$j<10;$j++){
        for($k=0;$k<count($b[$j]);$k++){
          if($b[$j][$k]!=0)
          $arr[$m++] = $b[$j][$k];//将容器中的数按序取出,进行下一次排序
        }
      }
      $b = array();//再给b附新值前要清空数组中原有的数据
    }
    for($i=0;$i<count($arr);$i++)
    {
      $thisNum = getN($arr[$i],$M);
      if($thisNum!=0) $flag = 1;
      $b[$thisNum][] = $arr[$i];//将数组中的数放入容器中
    }
  }
  print_r($arr);
  //var_dump($b);
}
/**基数排序**结束**/
paixu(array(65,3,45,6,7,8,31,100,1000,1234))
?>

Résultat d'exécution :


Copier le code Le code est comme suit :

Array ( [0] => 3 [1] => 6 [2] => 7 [3] => 8 [4] => 31 [5] = > 45 [6] => 65 [7] => 100 [8] => 1000 [9] => également être appliqué dans Recherche du nombre de doublons, recherche du nombre d'intervalles, etc.

Le code n'est pas important (mon code doit encore être amélioré), l'idée est la clé

PS : Voici une autre recommandation pour tout le monde. Un outil de démonstration sur le tri pour votre référence :

Démonstration d'animation en ligne d'insertion/sélection/bulle /merge/Hill/outils de processus d'algorithme de tri rapide :

http://tools.jb51.net/aideddesign/paixu_ys
Articles qui pourraient vous intéresser dans :

PHP Une explication de la méthode d'injection automatique de dépendances basée sur le mécanisme de réflexion

Pendant que PHP est en cours - explication détaillée de variables et explications des variables insérées dynamiquement dans les chaînes

Explication détaillée de l'utilisation de l'interface de Telegram pour implémenter la fonction gratuite de notification de message en PHP


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