php实现的几种基本算法
来源:互联网 发布:网络导购员是做什么的 编辑:程序博客网 时间:2024/06/06 03:36
一直以来,算法在我的认知里都很神奇。因为它们总在不经意之间就改变了世界。我们也是后来的得益者,站在巨人的肩膀上,才能看的更远。感谢那些不曾认识的甲乙丙。
冒泡排序
/* * 冒泡排序 (效率比较低) * * 外层循环决定循环层数 * 内层,两两比较,交换位置 * 每层循环过后,后面的值总是有序的最大(最小)的值,下次就无需去比较他们。 * 加入变量flag,如果没有交换位置,则说明顺序是对的,可以跳出循环结束了 */ $arr = array(); $arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45); $len = count($arr); for($i=1;$i<$len;$i++){ $flag = true; for($j=0;$j<$len-$i;$j++){ if($arr[$j]>$arr[$j+1]){ $flag = false; $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] =$temp; } } if($flag){ break; } } print_r($arr);
选择排序
/* * 选择排序 (比冒泡效率高) * * 外层决定循环层数 * 选择排序就是默认当前值为最小值,记录下标,然后进行循环比较,记录最小(最大)值的下标,最后交换两者的值。这样第一个值就是最小(最大)值。 * 然后,依次,循环下去。最后得到的就是有序的数组 */ $arr = array(); $arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45); $len = count($arr); for($i=0;$i<$len-1;$i++){ $p = $i; //默认当前位置的值即为最小,记录下下标。 for($j=$p+1;$j<$len;$j++){ if($arr[$p]>$arr[$j]){ $p = $j; //如果当前值比默认值小。则记录其下标 } } if($p !=$i){ $temp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $temp; } } print_r($arr);
插入排序(效率也比冒泡快)
/* * 插入排序 * * 外层决定循环层数,把当前值作为插入值去和前面的值进行比较 * 前面的值总是有序的,插入的值只需要和前面的值进行比较,确定最终位置就可以了 * 循环排序就好了 */ $arr = array(); $arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45); $len = count($arr); for($i=1;$i<$len;$i++){ $temp = $arr[$i]; for($j=$i-1;$i>=0;$j--){ if($arr[$j]>$temp){ $arr[$j+1] = $arr[$j]; $arr[$j] = $temp; }else{ break; } } } print_r($arr);
快速排序 (20世纪十大排序方法之一)
/* * 快速排序 * * 首先选取一个值,作为标尺,把大于他的放到right_array中,小于他的放到left_array中,递归调用 * 直到数组数为1,则返回,最后合并起来就是结果 */function quick_sort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //如果没有返回,说明数组内的元素个数 多余1个,需要排序 //选择一个标尺 //选择第一个元素 $base_num = $arr[0]; //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array();//小于标尺的 $right_array = array();//大于标尺的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边 $right_array[] = $arr[$i]; } } //再分别对 左边 和 右边的数组进行相同的排序处理方式 //递归调用这个函数,并记录结果 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合并左边 标尺 右边 return array_merge($left_array, array($base_num), $right_array); }$arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45);$res = quick_sort($arr); print_r($res);die;
千里之行,始于足下。加油!
参考地址
http://blog.csdn.net/guowenwen_0416/article/details/52778782
http://blog.csdn.net/baidu_30000217/article/details/53311840
http://www.jb51.net/article/57277.htm
http://blog.chinaunix.net/uid-28894229-id-4625483.html
1 0
- php实现的几种基本算法
- 基本的几种算法
- 用php实现几种常见的排序算法
- PHP 四种基本排序算法的代码实现
- PHP 四种基本排序算法的代码实现
- PHP 四种基本排序算法的代码实现
- PHP 四种基本排序算法的代码实现
- PHP 四种基本排序算法的代码实现
- PHP实现四种基本排序算法
- php实现四种基本排序算法
- PHP实现四种基本排序算法
- PHP实现四种基本排序算法
- PHP实现四种基本排序算法
- PHP实现四种基本排序算法
- PHP实现四种基本排序算法
- PHP实现四种基本排序算法
- PHP实现四种基本排序算法
- PHP实现四种基本排序算法
- cocos2dx[3.2](19)——裁剪节点ClippingNode
- 视频直播
- php循环练习
- RecycleView.Adapt的简单封装
- 使用logback
- php实现的几种基本算法
- [BZOJ1185][HNOI2007]最小矩形覆盖(旋转卡壳)
- 如何开启Spring Boot的开发模式?
- 冒泡排序BubbleSort
- git rebase
- 使用Gradle生成library工程的jar包
- 利用SharedPreference 保存List<Object>集合
- 北邮OJ-100. 二叉树的层数-12网研上机B
- 安卓下拉刷新开源库对比