php写的几种常见算法

<?php
$sort = [2, 4, 65, 3, 5, 24, 70, 6, 1];
//$sort = bubble($sort);
//$sort = ChoiceSort($sort);
$sort = InsertSort($sort);
print_r($sort);
$len = count($sort);
$index = search($sort, 65, 0, $len);
print_r($index);die;
/**
* 冒泡排序
* */
function bubble(array $sort){
$len = count($sort);
for($i = 1; $i < $len; $i++){
for($j = 0; $j < $len - $i; $j++){
if($sort[$j] >= $sort[$j+1]){
$tem = $sort[$j];
$sort[$j] = $sort[$j+1];
$sort[$j+1] = $tem;
}

}
echo "第".$i."轮排序后的结果为:";
print_r($sort);
}
return $sort;
}

/**
* 选择排序
* */
function ChoiceSort(array $sort){
$len = count($sort);
for($i = 0; $i < $len - 1; $i ++){
$min = $i;
for($j = $i + 1; $j < $len; $j ++){
if($sort[$min] > $sort[$j]){
$min = $j;
}
}
if($min != $i){
$tem = $sort[$i];
$sort[$i] = $sort[$min];
$sort[$min] = $tem;
echo "第".$i."轮排序后的结果为:";
print_r($sort);
}

}
return $sort;
}

/**
* 插入排序
* */
function InsertSort($sort){
$j = 0 ;
$len = count($sort);
for($i = 1; $i < $len; $i++){
$tem = $sort[$i];
$j = $i;
while($j > 0 && $tem < $sort[$j - 1] ){
$sort[$j] = $sort[$j - 1];
$j --;
}
$sort[$j] = $tem;
echo "第".$i."轮排序后的结果为:";
print_r($sort);
}
return $sort;
}

/**

*二分查找

*/
function search($sort, $key, $start, $end){
$mid = ($end - $start) / 2 + $start;
if($key == $sort[$mid]){
return $mid;
}elseif ($start > $end) {
// code...
return -1;
}else{
if($key < $sort[$mid]){
$end = $mid - 1;
}
if($key > $sort[$mid]){
$start = $mid + 1;
}
return search($sort, $key, $start, $end);
}
return -1;
}
?>

上一篇:电磁基本理论


下一篇:1008 数组元素循环右移问题