Maison > Article > développement back-end > Tri par sélection de l'algorithme de tri PHP
sélectionner le trisélectionner le tri
● Le tri par sélection est également un tri interne
● Idée de tri :
Sélectionnez d'abord un nombre au hasard. C'est le cas. pour sélectionner un élément du tableau à trier et le comparer avec d'autres éléments du tableau. Ensuite, comparez et échangez les positions pour obtenir la valeur minimale ou maximale, puis sélectionnez un nombre dans le tableau restant à comparer avec les éléments restants du tableau, et enfin obtenez le deuxième élément minimum ou maximum. Et ainsi de suite
● Diagramme schématique :
Le tri par sélection a une taille totale de tableau - 1 tour de tri, chaque tour de tri est un autre cycle, supposons d'abord que le tableau actuel est ; le nombre minimum, puis comparez-le avec les éléments suivants dans l'ordre. S'il s'avère qu'il y a un nombre inférieur au nombre actuel, le nombre minimum sera redéterminé et l'indice sera obtenu à la fin du tableau. est parcouru, le nombre minimum et l'indice de ce tour seront obtenus, et l'échange
Supposons qu'il y ait un tableau à trier [3, 1, 15, 5, 20]
2. Sélectionnez au hasard un élément, en supposant que le premier est le plus petit élément, comparez 3 avec les éléments restants du tableau. Après le premier tour de tri, l'élément minimum 1<?php $arr = [3, 1, 15, 5, 20]; $count = count($arr); //假设最小的元素就是第一个元素 $minIndex = 0; $min = $arr[0]; for ($j = $minIndex + 1; $j < $count; $j++) { if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值 $min = $arr[$j]; $minIndex = $j; } } $arr[$minIndex] = $arr[0]; $arr[0] = $min;3 est. obtenu. Sélectionnez à nouveau une valeur minimale hypothétique et comparez-la avec les éléments suivants pour obtenir la deuxième valeur minimale
<?php $arr = [1, 3, 15, 5, 20]; $count = count($arr); //假设最小的元素就是第二个元素 $minIndex = 1;//假设的最小元素的下表 $min = $arr[1];//假定最小元素的值 for ($j = $minIndex + 1; $j < $count; $j++) { if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值 $min = $arr[$j]; $minIndex = $j; } } if ($minIndex != 1) { $arr[$minIndex] = $arr[1];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交换 $arr[1] = $min;//元素下标交换 }4 Par analogie, vous pouvez utiliser une double boucle for pour obtenir l'algorithme de tri de sélection comme. suit :
public static function sortSelect(array $arr) :array { if (!is_array($arr)) { return ['message' => '$arr不是一个数组']; } $count = count($arr); if ($count <= 1) { return $arr; } for ($i = 0; $i < $count; $i++) { $minIndex = $i; $min = $arr[$i]; for ($j = $i + 1; $j < $count; $j++) { if ($min > $arr[$j]) {//选择的假定最小元素大于后面的元素 $min = $arr[$j];//把后面的最小元素赋值给假定的最小元素 $minIndex = $j;//把后面最小元素的坐标赋值给假定的最小元素 } } if ($minIndex != $i) {//如果在这个位置,一开始的假定最小元素的坐标被替换了,说明假定最小元素不是最小元素,那么发生交换 $arr[$minIndex] = $arr[$i];//交换最小元素,把最小元素和假定元素做交换 $arr[$i] = $min; } } return $arr; }● Le code complet est le suivant :
<?php class SelectSort { public static function select(array $arr):array { $count = count($arr); //假设最小的元素就是第二个元素 $minIndex = 0;//假设的最小元素的下表 $min = $arr[0];//假定最小元素的值 for ($j = $minIndex + 1; $j < $count; $j++) { if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值 $min = $arr[$j]; $minIndex = $j; } } if ($minIndex != 0) { $arr[$minIndex] = $arr[0];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交换 $arr[0] = $min;//元素下标交换 } var_dump($arr); $minIndex = 1;//假设的最小元素的下表 $min = $arr[1];//假定最小元素的值 for ($j = $minIndex + 1; $j < $count; $j++) { if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值 $min = $arr[$j]; $minIndex = $j; } } if ($minIndex != 1) { $arr[$minIndex] = $arr[1];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交换 $arr[1] = $min;//元素下标交换 } var_dump($arr); $minIndex = 2;//假设的最小元素的下表 $min = $arr[2];//假定最小元素的值 for ($j = $minIndex + 1; $j < $count; $j++) { if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值 $min = $arr[$j]; $minIndex = $j; } } if ($minIndex != 2) { $arr[$minIndex] = $arr[2];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交换 $arr[2] = $min;//元素下标交换 } var_dump($arr); return $arr; } public static function sortSelect(array $arr) :array { if (!is_array($arr)) { return ['message' => '$arr不是一个数组']; } $count = count($arr); if ($count <= 1) { return $arr; } for ($i = 0; $i < $count - 1; $i++) { $minIndex = $i; $min = $arr[$i]; for ($j = $i + 1; $j < $count; $j++) { if ($min > $arr[$j]) {//选择的假定最小元素大于后面的元素 $min = $arr[$j];//把后面的最小元素赋值给假定的最小元素 $minIndex = $j;//把后面最小元素的坐标赋值给假定的最小元素 } } if ($minIndex != $i) {//如果在这个位置,一开始的假定最小元素的坐标被替换了,说明假定最小元素不是最小元素,那么发生交换 $arr[$minIndex] = $arr[$i];//交换最小元素,把最小元素和假定元素做交换 $arr[$i] = $min; } } return $arr; } } $arr = [3, 1, 15, 5, 20]; var_dump(SelectSort::sortSelect($arr));
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!