Maison  >  Article  >  développement back-end  >  Explication détaillée du tri par sélection directe dans la série d'algorithmes de tri PHP

Explication détaillée du tri par sélection directe dans la série d'algorithmes de tri PHP

jacklove
jackloveoriginal
2018-07-03 17:53:011255parcourir

Cet article présente principalement en détail les informations pertinentes sur le tri par sélection directe de la série d'algorithmes de tri PHP. Les amis intéressés peuvent se référer à

Tri par sélection directe

L'idée de base du tri par sélection droite est la suivante : sélectionnez la valeur minimale entre R[0]~R[n-1] pour la première fois et échangez-la avec R[0], la deuxième fois, sélectionnez le valeur minimale de R[1]~R[n-1], échangez-la avec R[1], ...., la ième fois, sélectionnez la valeur minimale de R[i-1]~R[n- 1] Valeur, échange avec R[i-1], ....., pour la n-1ème fois, sélectionner la valeur minimale parmi R[n-2]~R[n-1], échange avec R[n -2], et passez au total n-1 fois, obtenez une séquence ordonnée classée du petit au grand par code de tri·

Le principal avantage du tri par sélection est lié au mouvement des données. Si un élément est dans la bonne position finale, il ne sera pas déplacé. Chaque fois que le tri par sélection échange une paire d'éléments, au moins l'un d'entre eux sera déplacé vers sa position finale, donc le tri d'une liste de n éléments nécessite au plus n-1 échanges. Parmi toutes les méthodes de tri qui reposent entièrement sur l’échange pour déplacer des éléments, le tri par sélection est une très bonne méthode.

Principe

Trouvez d'abord le plus petit (grand) élément de la séquence non triée, stockez-le à la position de départ de la séquence triée, puis sélectionnez-le parmi le reste éléments non triés. Continuez à rechercher l’élément le plus petit (le plus grand) et placez-le à la fin de la séquence triée. Et ainsi de suite jusqu'à ce que tous les éléments soient triés.

Exemple

Supposons que le tableau soit un[0...n-1].

1. Initialement, le tableau n'est pas ordonné et la zone est a[0..n-1]. Soit i=0
2. Sélectionnez le plus petit élément de la zone non ordonnée a[i...n-1] et échangez-le avec a[i]. Après l'échange, a[0...i] forme une zone ordonnée.
3.i++ et répétez la deuxième étape jusqu'à ce que i==n-1. Tri terminé.

Exemple

Trier le tableau [53,89,12,98,25,37,92,5]

Première prise i= 0 ;a[i] est la valeur minimale. Comparez la valeur suivante avec a[i]. Si elle est inférieure à a[i], échangez la position avec a[i], $i++

[5, 89 ,53,98,25,37,92,12]

Prenons d'abord i=1;a[i] comme valeur minimale, comparez la valeur suivante avec a[i], si elle est inférieure à a[i] petit, échangez des positions avec a[i], $i++

[5,12,89,98,53,37,92,25]

Répétez les étapes ci-dessus

Implémentation du code PHP

function select_sort($arr){
  $length=count($arr);
  for ($i=0; $i <$length-1 ; $i++) {
    for ($j=$i+1,$min=$i; $j <$length ; $j++) {
      if ($arr[$min]>$arr[$j]) {
        $min=$j;
      }
    }
    $temp=$arr[$i];
    $arr[$i]=$arr[$min];
    $arr[$min]=$temp;
  }
  return $arr;
}

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun, et. J'espère que tout le monde soutiendra le site Web chinois php.

Articles qui pourraient vous intéresser :

Explication détaillée du tri par insertion de la série d'algorithmes de tri PHP

Explication de l'algorithme de tri des buckets implémenté en PHP

Explication détaillée des problèmes rencontrés lors du développement et de la configuration du lazyload dans Laravel Service Provider

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