php之插入排序
程序员文章站
2022-03-25 12:54:44
...
1.直接插入排序代码实现:
header("content-type:text/html;charset=utf-8");
//直接插入排序实现从小到大排序//思路:每一趟排序将待排序的记录(元素)插入到前面的有序数列中,从左到右不断增大有序数列//关键:找到前面的有序数列中正确插入位置。$arr =array(6,18,2,4,16,8);
echo"
排序前:
";
print_r($arr);
insertSort($arr);
echo"
排序后:
";
print_r($arr);
functioninsertSort(&$arr)
{$len = count($arr);
//从第二个记录起,跟前面的有序数列比较寻找插入位置for($i = 1;$i $len; $i++)
{
$insertData = $arr[$i];//要插入的记录$pos = $i;//插入位置for($j = $i - 1;$j >= 0;$j--)
{
if($arr[$j] > $insertData)//如果前面的记录大于要插入的记录
{
$arr[$j+1] = $arr[$j];//前面的记录往后移一个下标$pos--;
}
else
{
break;
}
}
$arr[$pos] = $insertData;//插入到正确位置echo"
第{$i}趟排序结果:";
print_r($arr);
}
}
2.二分查找插入排序代码实现
header("content-type:text/html;charset=utf-8");
//二分查找插入排序:跟直接插入排序思路差不多,不同在通过二分查找来确定插入位置$arr =array(6,18,2,4,16,8);
echo"
排序前:
";
print_r($arr);
bsInsertSort($arr);
echo"
排序后:
";
print_r($arr);
functionbsInsertSort(&$arr)
{$len = count($arr);
for($i = 1;$i $len; $i++)
{
$left = 0;
$right = $i -1;
$mid = 0;
$insertData = $arr[$i];//要插入的记录while($left$right)
{
$mid = ($left + $right)/2;
if($insertData > $arr[$mid])
{
$left = $mid + 1;
}else
{
$right = $mid -1;
}
}
//$left是要插入的位置for($j=$i-1;$j>=$left;$j--)
{
$arr[$j+1] = $arr[$j];//后移比插入记录大的数
}
$arr[$left] = $insertData;
}
}