冒泡排序
function bubbleSort(&$arr){
$temp=0;
$flag=false;
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];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
$flag=true;
}
}
if(!$flag){
break;
}
$flag=false;
}
}
选择排序
function selectSort(&$arr){
$temp=0;
for($i=0;$i<count($arr)-1;$i++){
$minVal=$arr[$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;
}
}
插入排序
function insertSort(&$arr){
for($i=1;$i<count($arr);$i++){
$insertVal=$arr[$i];
$inserIndex=$i-1;
while($inserIndex >= 0 && $insertVal < $arr[$inserIndex]){
$arr[$inserIndex+1] = $arr[$inserIndex];
$inserIndex--;
}
$arr[$inserIndex+1] = $insertVal;
}
}
快速排序
function quickSort2($arr,$order = 'asc')
{
if(count($arr) <= 1)
return $arr;
$arr_left = $arr_right = array();
$val = $arr[0];unset($arr[0]);
foreach ($arr as $v) {
if(strtolower($order) == 'desc'){
if($v < $val)
$arr_right[] = $v;
else
$arr_left[] = $v;
}else{
if($v > $val)
$arr_right[] = $v;
else
$arr_left[] = $v;
}
}
$arr_left = quickSort($arr_left,$order);
$arr_right = quickSort($arr_right,$order);
return array_merge($arr_left,array($val),$arr_right);
}
顺序查找
$arr=array(46,90,900,0,-1);
function search(&$arr,$findVal){
$flag=false;
for($i=0;$i<count($arr);$i++){
if($findVal==$arr[$i]){
echo "找到了,下标为=$i";
$flag=true;
}
}
if(!$flag){
echo "查无此数";
}
}
二分查找
$arr=array(0,90,900,99990);
binarySwarch($arr,90,0,count($arr)-1);
function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){
if($rightIndex < $leftIndex){
echo "找不到该数";
return;
}
$middleIndex=round(($rightIndex+$leftIndex)/2);
if($findVal > $arr[$middleIndex]){
binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);
}else if($findVal < $arr[$middleIndex]){
binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);
}else{
echo "找到这个数。下标是$middleIndex";
}
}
第二种实现二分法(更简便)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}