冒泡算法
冒泡算法的思路是相邻的元素比较,极值出现在数组右端,即每一次循环都可选出极值.
function bubble($arr){
for($i=0,$len=count($arr);$i<$len-1;++$i){
for($j=0;$j<$len-1-$i;++$j){
if($arr[$j]>$arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}
return $arr;
}
选择排序
选择排序是依次用排序好的元素和剩下的元素比较,最值出现在数组左侧.
function selection($arr){
for($i=0,$len=count($arr);$i<$len-1;++$i){
for($j=$i+1;$j<$len-1;++$j){
if($arr[$i]>$arr[$j]){
$tmp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$tmp;
}
}
}
return $arr;
}
二分法
前提是对一个有序数组进行操作,找出所要元素对应的索引.
function harfsort($arr,$target){
$min=0;
$max=count($arr)-1;
$mid=(int)(($max-$min)/2);
while(true){
if($target>$mid){
$min=$mid+1;
}else if($target<$mid){
$max=$mid-1;
}else{
return $mid;
}
if($min>$max){
reutrn -1;
}
$mid=(int)(($max-$min)/2);
}
}