常见的PHP排序算法有很多,下面我们来介绍一些常见的排序算法及其原理。
冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
function bubbleSort($arr) { $len = count($arr); for ($i = 0; $i < $len 1; $i++) { for ($j = 0; $j < $len 1 $i; $j++) { if ($arr[$j] > $arr[$j + 1]) { $temp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $temp; } } } return $arr; }
选择排序(Selection Sort)
选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
function selectionSort($arr) { $len = count($arr); for ($i = 0; $i < $len 1; $i++) { $minIndex = $i; for ($j = $i + 1; $j < $len; $j++) { if ($arr[$j] < $arr[$minIndex]) { $minIndex = $j; } } if ($minIndex !== $i) { $temp = $arr[$i]; $arr[$i] = $arr[$minIndex]; $arr[$minIndex] = $temp; } } return $arr; }
插入排序(Insertion Sort)
插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
function insertionSort($arr) { $len = count($arr); for ($i = 1; $i < $len; $i++) { $preIndex = $i 1; $current = $arr[$i]; while ($preIndex >= 0 && $arr[$preIndex] > $current) { $arr[$preIndex + 1] = $arr[$preIndex]; $preIndex--; } $arr[$preIndex + 1] = $current; } return $arr; }
快速排序(Quick Sort)
快速排序是一种分治的排序算法,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
function quickSort($arr) { if (count($arr) <= 1) { return $arr; } $pivot = array_shift($arr); $left = []; $right = []; foreach ($arr as $value) { if ($value < $pivot) { array_push($left, $value); } elseif ($value > $pivot) { array_push($right, $value); } else { continue; // 注意:这里为了简化代码,我们直接跳过等于基准值的元素,实际应用中需要处理这种情况以保持稳定性,但这不影响最终的结果正确性。 } } return array_merge(quickSort($left), [$pivot], quickSort($right)); // 将基准值放在正确的位置上,然后递归地对左右两部分进行排序,这样就可以得到一个有序的数组,注意:这里使用了PHP的array_merge()函数来合并两个数组,而不是直接使用"+"操作符,这是因为"+"操作符会导致结果数组中出现重复的元素,而我们需要一个不包含重复元素的新数组,为了提高性能,我们还可以使用"call_user_func_array('array_merge', ...)"来替代"array_merge()",因为后者会自动检查参数类型并调用相应的函数,但由于PHP版本差异较大,因此在这里我们仍然使用"array_merge()"函数。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/195862.html