Maison >développement back-end >tutoriel php >Série d'algorithmes de tri PHP tri par seau explication détaillée_compétences php

Série d'algorithmes de tri PHP tri par seau explication détaillée_compétences php

小云云
小云云original
2018-01-08 09:48:581716parcourir

Cet article présente principalement à tout le monde le tri par buckets de la série d'algorithmes de tri. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer.

Tri par compartiment

Le tri par compartiment, ou ce qu'on appelle le tri par boîte, est un algorithme de tri qui fonctionne en divisant les tableaux en un nombre limité de compartiments. Chaque bucket est trié individuellement (il peut être possible d'utiliser un autre algorithme de tri ou de continuer à utiliser le tri par bucket de manière récursive). Le tri par seau est un résultat inductif du tri par compartiments. Le tri par compartiment utilise le temps linéaire (Θ(n)) lorsque les valeurs du tableau à trier sont uniformément réparties. Mais le tri par compartiment n’est pas un tri par comparaison et il n’est pas affecté par la limite inférieure de O(n log n).

Principe

Définissez un tableau quantitatif comme un seau vide.
Recherchez la séquence et placez les éléments dans les seaux correspondants un par un.
Triez chaque seau qui n'est pas vide.
Remettez les éléments du seau qui n'est pas vide dans la séquence d'origine.

Exemple

Supposons les numéros à trier [6 2 4 1 5 9]

Préparez 10 seaux vides, maximum Plusieurs seaux vides
[0 0 0 0 0 0 0 0 0 0] Seaux vides
[0 1 2 3 4 5 6 7 8 9] Numéro du seau (n'existe en fait pas)

1. Retirez les nombres du tableau à trier séquentiellement. Tout d'abord, 6 est retiré, puis 6 est placé dans le seau n° 6. Le processus est similaire à celui-ci : seau vide [tableau à trier [ 0". ] ] = tableau à trier [ 0 ]

[6 2 4 1 5 9] Tableau à trier
[0 0 0 0 0 0 6 0 0 0] Seau vide
[0 1 2 3 4 5 6 7 8 9] Numéro de bucket (n'existe en fait pas)

2 Retirez séquentiellement le numéro suivant du tableau à trier à ce moment-là. est sorti et mis dans le seau n°2, quel que soit son numéro

[6 2 4 1 5 9] Tableau à trier
[0 0 2 0 0 0 6 0. 0 0] Seau vide
[0 1 2 3 4 5 6 7 8 9] Numéro de seau (n'existe en fait pas)

3, 4, 5, 6 sont omis, le processus est pareil, une fois que tout sera mis dans le seau, cela deviendra comme ceci :

[6 2 4 1 5 9] Tableau à trier
[0 1 2 0 4 5 6 0 0 9] Seau vide
[0 1 2 3 4 5 6 7 8 9] Numéro du seau (n'existe pas en fait)
0 signifie seau vide, sautez-le, sortez-le simplement dans l'ordre : 1 2 4 5 6 9

Implémentation du code PHP


<?php
function bucket_sort($arr){
 $result=[];
 $length=count($arr);
 //入桶
 for($i=0,$max=$arr[$i];$i<$length;$i++){
  if ($max<$arr[$i]) {
   $max=$arr[$i];
  }
  $bucket[$arr[$i]]=[];
  array_push($bucket[$arr[$i]],$arr[$i]);
 }
 //出桶
 for($i=0;$i<=$max;$i++){
  if(!empty($bucket[$i])){
   $l=count($bucket[$i]);
   for ($j=0; $j <$l ; $j++) {
    $result[]=$bucket[$i][$j];
   }
  }
 }
 return $result;
}

Recommandations associées :

Calcul de la période d'ovulation méthode Révision et résumé de l'algorithme de tri PHP

Révision et résumé de l'algorithme de tri PHP_Tutoriel PHP

algorithme de tri php ?algorithme de tri php classique_Tutoriel 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