Maison >développement back-end >Problème PHP >Il existe plusieurs façons de trier en php
Les méthodes de tri PHP incluent : 1. Le tri par bulles, c'est-à-dire que chaque fois que deux nombres adjacents sont comparés et trouvés dans l'ordre opposé aux exigences de tri, ils sont échangés ; 2. Tri par sélection ; le tri, c'est-à-dire l'insertion du n-ème nombre dans le nombre ordonné précédent afin que ces n nombres soient également dans l'ordre ;
Prémisse : utilisez le tri à bulles, le tri rapide, le tri par sélection et le tri par insertion pour trier les valeurs du tableau ci-dessous de petite à grande à trier.
$arr(1,43,54,62,21,66,32,78,36,76,39);
Recommandé : "Tutoriel PHP"
1. Tri des bulles
Analyse des idées : Dans un ensemble de nombres à trier, pour la séquence qui n'a pas encore été triée, trier les deux nombres adjacents dans l'ordre d'avant en arrière. Comparez et ajustez pour que les nombres plus grands diminuent et que les nombres plus petits augmentent. Autrement dit, chaque fois que deux nombres adjacents sont comparés et qu'il s'avère que leur ordre est opposé à l'exigence d'ordre, ils sont échangés.
Implémentation du code :
$arr=array(1,43,54,62,21,66,32,78,36,76,39); function bubbleSort($arr) { $len=count($arr); //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++) { //该层循环用来控制每轮 冒出一个数 需要比较的次数 for($k=0;$k<$len-$i;$k++) { if($arr[$k]>$arr[$k+1]) { $tmp=$arr[$k+1]; $arr[$k+1]=$arr[$k]; $arr[$k]=$tmp; } } } return $arr; }
2. Tri par sélection
Analyse des idées : Dans un ensemble de nombres à trier, sélectionnez le plus petit nombre Échangez avec le numéro en première position. Trouvez ensuite le plus petit parmi les nombres restants et échangez-le avec le nombre en deuxième position. Ce cycle se poursuit jusqu'à ce que l'avant-dernier nombre soit comparé au dernier nombre.
Implémentation du code :
function selectSort($arr) { //双重循环完成,外层控制轮数,内层控制比较次数 $len=count($arr); for($i=0; $i<$len-1; $i++) { //先假设最小的值的位置 $p = $i; for($j=$i+1; $j<$len; $j++) { //$arr[$p] 是当前已知的最小值 if($arr[$p] > $arr[$j]) { //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。 $p = $j; } } //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。 if($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; } } //返回最终结果 return $arr; }
3. Tri par insertion
Analyse des idées : Dans un ensemble de nombres à trier, supposer que le numéro précédent est Déjà Maintenant que l'ordre est dans l'ordre, il faut insérer le nième numéro dans le numéro ordonné précédent pour que ces n numéros soient également dans l'ordre. Répétez ce cycle jusqu'à ce que tout soit en ordre.
Implémentation du code :
function insertSort($arr) { $len=count($arr); for($i=1, $i<$len; $i++) { $tmp = $arr[$i]; //内层循环控制,比较并插入 for($j=$i-1;$j>=0;$j--) { if($tmp < $arr[$j]) { //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换 $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } else { //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。 break; } } } return $arr; }
4. Tri rapide
Analyse des idées : sélectionnez un élément de référence, généralement le premier élément ou le dernier élément. Au cours d'un balayage, la colonne à trier est divisée en deux parties, une partie est plus petite que l'élément de référence et l'autre partie est supérieure ou égale à l'élément de référence. A ce moment, l'élément de base est à sa position correcte après le tri, puis les deux parties divisées sont triées récursivement de la même manière.
Implémentation du code :
function quickSort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //选择第一个元素作为基准 $base_num = $arr[0]; //遍历除了标尺外的所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array(); //小于基准的 $right_array = array(); //大于基准的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边 $right_array[] = $arr[$i]; } } //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合并 return array_merge($left_array, array($base_num), $right_array); }
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!