排序算法(上)
冒泡排序:操作相邻的两个元素进行比较
$arr = [15,23,6,3,8,3,32,88,23,4];
function mysort($arr)
{
$p=0;
$len =count($arr)-1;
if($len<=1)return false;
for($k=0;$k<$len;$k++)
{
++$p;
$static = false;
for($i=0;$i <$len; $i++)
{
if($arr[$i] > $arr[$i+1]){
$m = $arr[$i];
$arr[$i] = $arr[$i+1];
$arr[$i+1] = $m;
$static = true;
}
}
if(!$static)break;
}
echo $p;
return $arr;
}
$arr = mysort($arr);
var_dump($arr);
插入排序:分开为两个区间,已分区间和未分区间
/**
* 插入排序
* $len 统计数组长度
*
*分区间,第一个元素作为已分区间,从第二个元素开始进行比较,并且移动数据(比较顺序是从后往前比较移动)
*/
$arr = [15,23,6,3,8,3,32,88,23,4];
function myks($arr){
for($i = 0; $i < count($arr); $i++){
$val = $arr[$i];
$j = $i -1;
while($j >= 0 && $arr[$j] > $val){
$arr[$j+1] = $arr[$j];
$j--;
}
$arr[$j+1] = $val;
}
return $arr;
}
$m= myks($arr);
var_dump($m);
选择排序:也是和插入排序一样分为已排区间和未排区间,但是选择排序会从未排区间中找到最小的元素来排序