php实现的许多的经典排序算法,这些算法可以经过一些改动用到更多的实际问题中,因为这些经典的算法有非常好的思想和逻辑在里面,这些都是及其值得学习和借鉴的。
当我们学习到了许多好的编程思想和逻辑,就能写出一些高性能的代码,一些复杂逻辑的功能就可以通过很巧妙和简洁的方法来实现。
/**
* 使用递归实现字符串翻转
* @param $str 需要翻转的字符串
* return string
*/
header('Content-Type:text/html;charset=utf-8');
function reverse_r($str){
if(strlen($str)>0){
reverse_r(substr($str,1));
}
echo substr($str,0,1);
return;
}
echo "*******递归实现字符串翻转********************<br>";
$str ='hello';
$new_str = reverse_r($str);
echo $new_str.'</br>';
/**
* 冒牌排序法
* @param array $arr;
* return array
*/
function arrSort($arr)
{
for ($i=0;$i<count($arr)-1;$i++)
{
for ($j=0;$j<count($arr)-1-$i;$j++)//这里减去$i 是因为我们循序结束就已经给一个数拍好了位置 下次循环的时候就不能为他排序了
{
if ($arr[$j]>$arr[$j+1])
{
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}
echo "*******冒泡排序********************<br>";
$arr1= array(5,0,6,-2,-100,1);
print_r(arrSort($arr1));
echo '</br>';
echo '</br>';
/**
* 选择排序法
* @param array $arr
* return array
*/
function selectSort($arr)
{
$temp='';
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;
}
return $arr;
}
echo "*******选择排序********************<br>";
$arr2 = array(14,3,2,1);
print_r(selectSort($arr2));
echo '</br>';
echo '</br>';
/**
* 插入排序法
* @param array $arr
* return array
*/
function insertSort($arr)
{
for ($i=1;$i<count($arr);$i++)
{
$insertVal = $arr[$i];//待插入的值
$insertIndex = $i-1;//待比较的值的下标
while ($insertIndex>-1&&$insertVal<$arr[$insertIndex])
{
$arr[$insertIndex+1] = $arr[$insertIndex];
$insertIndex--;
}
$arr[$insertIndex+1] = $insertVal;
}
return $arr;
}
echo "*******插入排序********************<br>";
$arr = array(6,3,9,10,2,0,-100);
$new_arr = insertSort($arr);
print_r($new_arr);
echo '</br>';
echo '</br>';
echo '</br>';