关于常用到的几个排序,php的实现
2013-09-02 22:54
513 查看
<?php $arr = array(20,4,2,-1,-34,0,50,6,19); #冒泡排序 function bubbleSort($arr){ $flag = 0; for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-1-$i;$j++){ if($arr[$j] > $arr[$j+1]){ $temp = $arr[$j+1]; $arr[$j+1] = $arr[$j]; $arr[$j] = $temp; $flag = 1; } } //优化 if(!$flag){ //已经有序 break; } $flag=0; } return $arr; } echo implode(',',bubbleSort($arr)).'<br>'; #选择排序 function selectSort($arr){ for($i=0;$i<count($arr)-1;$i++){ //假设$i就是最小的 $minVal = $arr[$i]; //$i是最小的下标 $minIndex = $i; for($j=$i+1;$j<count($arr);$j++){ //假设错误 if($minVal > $arr[$j]){ $minVal = $arr[$j]; $minIndex = $j; } } //最后交换 $temp = $arr[$i]; $arr[$i] = $arr[$minIndex]; $arr[$minIndex] = $temp; } return $arr; } echo implode(',',selectSort($arr)).'<br>'; #插入排序 function insertSort($arr){ //先默认下标为0的已经是有序的 for($i=1;$i<count($arr);$i++){ //准备插入的数据 $insertVal = $arr[$i]; //待比较的下标,也就是前面的 $insertIndex = $i-1; //如果满足下面条件,说明位置还未找到 while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){ //同时把数后面移动一下 $arr[$insertIndex+1] = $arr[$insertIndex]; $insertIndex--; } //插入 $arr[$insertIndex+1] = $insertVal; } return $arr; } echo implode(',',insertSort($arr)).'<br>'; #快速排序(递归) function quickSort($left,$right,&$arr){ $l = $left; $r = $right; $pivot = $arr[($left+$right)/2]; $temp=0; while($l<$r){ while($arr[$l]<$pivot)$l++; while($arr[$r]>$pivot)$r--; if($l>=$r) break; $temp=$arr[$l]; $arr[$l]=$arr[$r]; $arr[$r]=$temp; if($arr[$l]==$pivot)--$r; if($arr[$r]==$pivot)++$l; } if($l==$r){ $l++; $r--; } if($left<$r) quickSort($left,$r,$arr); if($right>$l)quickSort($l,$right,$arr); //return $arr; } quickSort(0,count($arr)-1,$arr); echo implode(',',$arr).'<br>'; #二分查找 function binarySearch(&$arr,$findVal,$l,$r){ //停止条件 if($l>$r){ return; } //找到中间的下标 $midIndex = round(($r+$l)/2); if($findVal>$arr[$midIndex]){ binarySearch($arr,$findVal,$midIndex+1,$r); }elseif($findVal<$arr[$midIndex]){ binarySearch($arr,$findVal,$l,$midIndex-1); }else{ echo $midIndex; } } binarySearch($arr,0,0,count($arr)-1);都已经亲自测试过,可以正常运行!
本文出自 “phper-每天一点点~” 博客,请务必保留此出处http://janephp.blog.51cto.com/4439680/1287597
相关文章推荐
- php冒泡排序实现方法,传入几个数字排序后 输出实战例子
- 四种常用排序方法的基本思想和PHP实现源代码
- 关于PHP二维数组排序使用key实现
- PHP实现常用的排序和两个查找
- 关于字符串判断的几个常用属性 以及简单项目实现中数组运用的初步思想 蓝懿教育
- 用PHP实现一个关于德州扑克算法的程序(二):排序
- php二维数组排序实现
- c语言常用内部排序的实现
- SpringMVC实现依赖注入的几个常用注解的用法解释和示例说明
- 四种常见的数组排序方法(php实现)
- php实现木桶排序
- PHP数组递归排序实现方法示例
- 一步步学习数据结构和算法之常用排序效率分析及java实现
- PHP的几个常用加密函数
- 常用的关于手的事件介绍与实现
- 关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案
- php几个常用的概率算法(抽奖、广告首选)
- PHP实现对文本数据库的常用操作方法实例演示
- php 二维数组时间排序实现代码