您的位置:首页 > 编程语言 > PHP开发

关于常用到的几个排序,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: