2020-10-22 10:53:00
围观(4280)
冒泡排序算法:
function bubbleSort(array $lst_number) { // 获取数组长度 $length = count($lst_number); if ($length <= 1) return $lst_number; // 本层循环控制需要冒泡排序的次数 for ($i = 1; $i < $length; $i++) { // 本层控制每次冒泡当前和后面数字大小比较的次数 for ($j = 0; $j < $length - $i; $j++) { if ($lst_number[$j] > $lst_number[$j + 1]) { // 当前数字比下一个数字大 则调换位置 $temp = $lst_number[$j + 1]; $lst_number[$j + 1] = $lst_number[$j]; $lst_number[$j] = $temp; } } } return $lst_number; }
实现原理:依次获取数组里面的值,与后面相邻的数字进行比较,数字大的往后一位排序,数字小的向前移(即数字位置互换)。
快速排序算法:
function quickSort(array $lst_number) { // 获取数组长度 $length = count($lst_number); if ($length <= 1) return $lst_number; // 选择第一个元素作为基准 $base_number = $lst_number[0]; $lst_left = []; // 小于基准的 $lst_right = []; // 大于基准的 // 遍历除了基准外的数字,按照大小关系放入两个数组 for ($i = 1; $i < $length; $i++) { // 此处判断基准数小于当前循环的数 改变小于号为大于号即可将处理结果改为大到小排序 if ($base_number < $lst_number[$i]) { // 小于基准数 放入右数组 $lst_right[] = $lst_number[$i]; } else { // 大于基准数 放入左数组 $lst_left[] = $lst_number[$i]; } } // 分别对左数组和右数组进行相同的排序处理并递归调用这个函数 $lst_left = quickSort($lst_left); $lst_right = quickSort($lst_right); // 合并数组 return array_merge($lst_left, [$base_number], $lst_right); }
实现原理:选择数组第一个数字作为基准数,通过循环将数字分为小于基准与大于基准的,再递归重复将数组第一个数字作为基准再次比较并存入数组,依次重复操作后即可获取到比较完成后的数组。
运行方法:
// 先定义一个数组 $lst_number = [1, 100, 8, 9, 5, 3, 22, 10, 19, 14, 2, 33, 56]; // 冒泡算法结果: var_dump(bubbleSort($lst_number)); // 快速排序结果: var_dump(quickSort($lst_number));
关于数字比较的算法还有比较常见的选择排序 / 插入排序。 博主比较喜欢快速排序,因为只循环了一次数组(虽然有递归)比较容易理解。
本文地址 : bubaijun.com/page.php?id=214
版权声明 : 未经允许禁止转载!
上一篇文章: PHP使用Redis实现队列
下一篇文章: jQuery实现商品规格选择效果