0

0

php算法学习记录

不言

不言

发布时间:2018-04-14 11:52:49

|

1862人浏览过

|

来源于php中文网

原创


$i;$j--){            
if($arr[$j]<$arr[$j-1]){                
$tmp = $arr[$j];                
$arr[$j] = $arr[$j-1];                
$arr[$j-1] = $tmp;            
}            
//另外一种是每次单独拿一个去跟后面的去比较---暂时不知道叫什么            
if ($arr[$j] < $arr[$i]) {                
$temp = $arr[$j];                
$arr[$j] = $arr[$i];                
$arr[$i] = $temp;            
}        
}    
}    
return $arr;}#冒泡算法(另一种写法)function bubbleSort1($arr) {
    $length = count($arr);
        for ($i = 0;$i<$length;$i++) {        
        for ($j = 0;$j<$length-1;$j++) {
        //每次它的极限就是比它此刻小一个的值
                    if ($arr[$j] < $arr[$j + 1]) {                
                    $temp = $arr[$j];               
                    $arr[$j] = $arr[$j + 1];                
                    $arr[$j + 1] = $temp;            
                    }//            
                    if ($arr[$j] > $arr[$i]) {//                
                    $temp = $arr[$j];//                
                    $arr[$j] = $arr[$i];//                
                    $arr[$i] = $temp;//            
                    }        
                    }
                        }    
                        return $arr;}/** 
                        * 快速排序 
                        * 思路: 
                        *      1.选择最前面的值作为枢轴 
                        *      2.定义两个数组 
                        *      3.把比枢轴小的放到左边--比数轴大的放到右边 
                        *      4.再递归使用本函数分别合并两边的结果,最终再把最初的数轴放中间合并返回结果 
                        * @param $arr * @return array    
                        //程序流程    
                        //枢轴为5 left 3,4,1,2  right 8,9,6,7    
                        //left 枢轴为3 left 1,2  right 4 枢轴为8 left6,7  right  9    
                        //左边合并的结果  然后合并上最初的枢轴  再合并生右边合并的结果    
                        //1,2,3,4    5    6,7,8,9 */function QSort($arr){    
                        $length = count($arr);    if($length <=1){        
                        return $arr;    }    
                        $pivot = $arr[0];//枢轴    
                        $left_arr = array();    
                        $right_arr = array();    
                        for($i=1;$i<$length;$i++){//注意$i从1开始0是枢轴        
                        if($arr[$i]<=$pivot){//            
                        array_push($left_arr,$arr[$i]);            
                        $left_arr[] = $arr[$i];       
                        //这种往数组里添加值得方式相对快速        
                        }else{//            
                        array_push($right_arr,$arr[$i]);            
                        $right_arr[] = $arr[$i];      
                        //这种往数组里添加值得方式相对快速        
                        }    
                        }    
                        $left_arr = QSort($left_arr);//递归排序左半部分    
                        $right_arr = QSort($right_arr);//递归排序右半部份    
                        print_r(array_merge($left_arr,array($pivot),$right_arr));    
                        echo "
"; return array_merge($left_arr,array($pivot),$right_arr);//合并左半部分、枢轴、右半部分} /** * 插入排序 * 思路: * 将要排序的元素插入到已经 假定排序号的数组的指定位置。 * @param $arr * @return mixed //程序流程 //第一次进入 $tmp=5 for($j=$i-1;$j>=0;$j--) 如果 5<3 不成立 //第二次 $tmp=8 如果 8<5 不成立 //第三次 $tmp=4 如果 4<8 8和4替换 结果为 3,5,4,8,9,6,1,7,2 //第四次 $tmp=9 如果 9<8 不成立 // $tmp=6 6<9 3,5,4,8,6,9,1,7,2 //1<9 3,5,4,8,6,1,9,7,2 //7<9 3,5,4,8,6,1,7,9,2 //2<9 3,5,4,8,6,1,7,2,9 */ function insert_sort($arr) { //找到其中一个需要排序的元素 //这个元素 就是从第二个元素开始,到最后一个元素都是这个需要排序的元素 //i循环控制 每次需要插入的元素,一旦需要插入的元素控制好了, //间接已经将数组分成了2部分,下标小于当前的(左边的),是排序好的序列 for($i=1, $len=count($arr); $i<$len; $i++) { //获得当前需要比较的元素值。 $tmp = $arr[$i];// echo "tmp=".$tmp."---"; for($j=$i-1;$j>=0;$j--) { if($tmp < $arr[$j]) {// echo "如果".$tmp."<".$arr[$j]."的话。就替换成功"; //发现插入的元素要小,交换位置 //将后边的元素与前面的元素互换 $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } else {// echo "如果".$tmp."<".$arr[$j]."的话。就替换失败";// print_r($arr);// echo "
"; break; }// print_r($arr);// echo "
"; } } return $arr;} /** * 顺序查找 * @param $arr * @param $key * @return int *///$key = 2; //echo "
顺序常规查找{$key}的位置:"; //echo SqSearch($arr,$key); function SqSearch($arr,$key){ $length = count($arr); for($i=0;$i<$length;$i++){ if($key == $arr[$i]){ return $i+1; } } return -1;} /** *二分查找(必须是一个有序的数组) * 假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置. * 一。要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比。 * 二。如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分, 因为在中间之前,所以我们需要变的值是结束位置的值,此时结束位置的值应该是我们此时的中间位置。 * 三。反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分, 因为在中间值之后,所以我们需要改变的值是开始位置的值,此时开始位置的值应该是我们此时的中间位置, 直到我们找到指定值。 //程序流程 //找6 $mid=4 6==5 6<5 6>5---->让mid+1 // mid=5 return 5+1 位置为6 * @param $arr * @param $low 从第一个开始找(索引值0) * @param $high 结束点 (数组的长度) * @param $key * @return int *///$key = 6;//echo "二分查找{$key}的位置:"; //echo binary_search($arr,0,count($arr),$key); function binary_search($arr,$low,$high,$key){ for($i=$low;$i<=$high;$i++){ $mid = intval(($low+$high)/2); // echo $mid; //不够就是不够,不会往上舍取 if($key == $arr[$mid]){ return $mid+1; }elseif($key<$arr[$mid]){ $high = $mid-1; }elseif($key>$arr[$mid]){ $low = $mid+1; } }// while($low<=$high){// $mid = intval(($low+$high)/2);// if($key == $arr[$mid]){// return $mid+1;// }elseif($key<$arr[$mid]){// $high = $mid-1;// }elseif($key>$arr[$mid]){// $low = $mid+1;// }// } return -1; }

               

Mubert
Mubert

Mubert -一个使用人工智能算法和机器学习生成连续音乐流的平台

下载

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1963

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1290

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1196

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1400

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号