PHP版本常用的排序算法汇总
发布:smiling 来源: PHP粉丝网 添加日期:2021-06-30 20:33:38 浏览: 评论:0
本文给大家汇总介绍了一些php中常见的排序算法的代码,非常实用,有需要的小伙伴可以参考下。
1、冒泡排序
- function bubble_sort($arr){
- $n = count($arr);
- for($i=0;$i<$n-1;$i++){
- for($j=$i+1;;$j<$n-$i;$j++){
- if($arr[$j]<$arr[$i]){
- $temp = $arr[$i];
- $arr[$i] = $arr[$j];
- $arr[$j] = $temp;
- }
- }
- }
- }
2、归并排序
merge函数将指定的两个有序数组(arr1arr2,)合并并且排序,我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据。
- function al_merge($arrA, $arrB)
- {
- $arrC = array();
- while (count($arrA) && count($arrB)) {
- //这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
- //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
- $arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);
- }
- return array_merge($arrC, $arrA, $arrB);
- }
- //归并排序主程序
- function al_merge_sort($arr)
- {
- $len = count($arr);
- if ($len <= 1) {
- return $arr; //递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
- }
- $mid = intval($len / 2); //取数组中间
- $left_arr = array_slice($arr, 0, $mid); //拆分数组0-mid这部分给左边left_arr
- $right_arr = array_slice($arr, $mid); //拆分数组mid-末尾这部分给右边right_arr
- $left_arr = al_merge_sort($left_arr); //左边拆分完后开始递归合并往上走
- $right_arr = al_merge_sort($right_arr); //右边拆分完毕开始递归往上走
- $arr = al_merge($left_arr, $right_arr); //合并两个数组,继续递归
- return $arr;
- }
- $arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9);
- print_r(al_merge_sort($arr));
3、二分查找-递归。
- function bin_search($array,$low,$high,$k){
- if($low <= $high){
- $mid = intval(($low+$high)/2);
- }else{
- return false;
- }
- if($array[$mid] == $k){
- return $mid;
- }elseif($k < $array[$mid]){
- return bin_search($array,$low,$mid-1,$k);
- }else{
- return bin_search($array,$mid+1,$high,$k);
- }
- }
- $arr = array(12, 5, 4, 7, 3, 8, 4, 2, 6, 4, 9);
- $index = bin_search($arr,0,10,12); //直接输出为空,不解
- echo(intval($index));
4、二分查找-非递归
- function bin_search($arr,$low,$high,$value) {//$arr 数组; $slow 最小索引; $high 最大索引 $value 查找的值
- while($low<=$high) {
- $mid=intval(($low+$high)/2);
- if($value==$arr[$mid]){
- return $mid;
- }elseif($value<$arr[$mid]){
- $high=$mid-1;
- }else{
- $low=$mid+1;
- }
- }
- return false;
- }
5、快速排序
- function quick_sort($arr) {
- $n=count($arr);
- if($n<=1)
- return $arr;
- $key=$arr[0];
- $left_arr=array();
- $right_arr=array();
- for($i=1;$i<$n;$i++) {
- if($arr[$i]<=$key)
- $left_arr[]=$arr[$i];
- else
- $right_arr[]=$arr[$i];
- }
- $left_arr=quick_sort($left_arr);
- $right_arr=quick_sort($right_arr);
- return array_merge($left_arr,array($key),$right_arr);
- }
6、选择排序
- function select_sort($arr) {
- $n=count($arr);
- for($i=0;$i<$n;$i++) {
- $k=$i;
- for($j=$i+1;$j<$n;$j++) {
- if($arr[$j]<$arr[$k])
- $k=$j;
- }
- if($k!=$i) {
- $temp=$arr[$i];
- $arr[$i]=$arr[$k];
- $arr[$k]=$temp;
- }
- }
- return $arr;
- }
7、插入排序
- function insertSort($arr) {
- $n=count($arr);
- for($i=1;$i<$n;$i++) {
- $tmp=$arr[$i];
- $j=$i-1;
- while($arr[$j]>$tmp) {
- $arr[$j+1]=$arr[$j];
- $arr[$j]=$tmp;
- $j--;
- if($j<0)
- break;
- }
- }
- return $arr;
- }
Tags: PHP排序算法
相关文章
- ·PHP中实现冒泡排序和快速排序算法示例(2015-04-04)
- ·PHP 冒泡/快速/选择/插入排序算法实例讲解(2015-12-24)
- ·php四种基础排序算法的运行时间比较(2016-08-25)
- ·php实现的常见排序算法汇总(2021-04-11)
- ·PHP简单选择排序算法实例(2021-05-09)
- ·PHP四种基本排序算法示例(2021-05-22)
- ·PHP排序算法系列之桶排序详解(2021-08-26)
- ·PHP排序算法系列之归并排序详解(2021-08-27)
- ·PHP排序算法系列之直接选择排序详解(2021-08-27)
- ·PHP排序算法系列之插入排序详解(2021-08-27)
- ·PHP排序算法之冒泡排序(Bubble Sort)实现方法详解(2021-09-11)
- ·PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析(2021-09-11)
- ·PHP排序算法之基数排序(Radix Sort)实例详解(2021-09-11)
- ·PHP排序算法之快速排序(Quick Sort)及其优化算法详解(2021-09-11)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)