经典排序算法集锦(PHP实现)
一、 经典排序算法——冒泡排序
1.冒泡排序的中心思想:
从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。
算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾,从而形成有序的队列。
2.代码实现:
/** * 冒泡排序 */ public function bubble() { # 由小到大排序 # 定义待排序数据 $data = [8, 5, 5, 8, 1, 3, 6, 95, 25, 252, 5552, 44526, 5522, 522, 336]; # 定义交换元素位置的变量,临时存储元素值使用 $temp = null; # 实现 # 1.外层循环控制头部元素,并且从第一个元素开始,最后一个元素结束 for ($i = 0; $i < count($data); $i++) { # 2.内层循环控制外层循环之后的每一个元素,到最后一个结束 (比如外层是第一个8,那么内层就是5、5、8、1、3·····) for ($j = $i + 1; $j < count($data); $j++) { # 倘若$i控制的元素值大于$j控制的元素值,那么我们将两者交换位置 if ($data[$i] > $data[$j]) { $temp = $data[$j]; $data[$j] = $data[$i]; $data[$i] = $temp; } } } return response($data); }
3.输出结果:

二、 经典排序算法——快速排序
1.快速排序的中心思想:
快速排序是由分治思想产生的,通过每次排序将待排序内容分成两部分,一部分保存的元素值比另一部分保存的元素值小;
之后分别对这两部分继续进行排序(使用同样的算法,实际就是递归),使整个列表有序。
2.代码实现:
/** * 快速排序 */ public function quick() { # 由小到大排序 # 定义待排序数据 $data = [8, 5, 5, 8, 1, 3, 6, 95, 25, 252, 5552, 44526, 5522, 522, 336]; $result = $this->quick_do($data); return response($result); } /** * 快速排序执行 */ public function quick_do($data) { # 检查参数长度,如果只有一个元素,则直接返回,无须比较,否则会出现死循环 if (count($data) <= 1) { return $data; } # 定义基准元素(以此元素为基准进行分治处理,model_element:标兵元素) $model_element = $data[0]; # 定义容器数组 $left_array = $right_array = []; # 将元素全部与标兵元素进行对比,小于标兵元素的放在left_array中;大于标兵元素的放在right_array中 for ($i = 1; $i < count($data); $i++) { if ($data[$i] > $model_element) { $right_array[] = $data[$i]; } else if ($data[$i] <= $model_element) { $left_array[] = $data[$i]; } } # 递归处理分治好的元素,实际上是使用本逻辑继续处理分治好的元素,递归后一定会得到有序的内容 $left_array = $this->quick_do($left_array); $right_array = $this->quick_do($right_array); # 合并最后结果,把标兵元素放在中间位置 return array_merge($left_array, [$model_element], $right_array); }
3.输出结果:


浙公网安备 33010602011771号