3.插入排序
<?php
function insertionSort($sortData)
{
$count = count($sortData);
$sortCount = 0;
for ($i = 1; $i < $count; $i++) {
$preIndex = $i - 1;
$current = $sortData[$i];
$sortCount++;
while ($preIndex >= 0 && $current < $sortData[$preIndex]) {
$sortData[$preIndex + 1] = $sortData[$preIndex];
$preIndex--;
$sortCount++;
}
$sortData[$preIndex + 1] = $current;
}
echo 'insertionSort Count:' . $sortCount;
echo PHP_EOL;
return $sortData;
}
function insertionSort_2($sortData)
{
$count = count($sortData);
$sortCount = 0;
for ($i = 1; $i < $count; $i++) {
$current = $sortData[$i];
$start = binarySearchIndex($sortData, $i - 1, $current, $sortCount);
for ($j = $i - 1; $j >= $start; $j--) {
$sortCount++;
$sortData[$j + 1] = $sortData[$j];
}
$sortData[$start] = $current;
}
echo 'insertionSort_2 Count:' . $sortCount;
echo PHP_EOL;
return $sortData;
}
function binarySearchIndex($sortData, $end, $compare, &$sortCount)
{
$start = 0;
while ($start <= $end) {
$sortCount++;
$middle = intval(($start + $end) / 2);
if ($sortData[$middle] > $compare) {
$end = $middle - 1;
} else {
$start = $middle + 1;
}
}
return $start;
}
$testSortData = [3, 2, 9, 234, 3432, 43, 22, 33, 21312, 123];
$sortResult = insertionSort($testSortData);
echo 'insertionSort Result:';
echo PHP_EOL;
echo(implode(',', $sortResult));
echo PHP_EOL;
$sortResult = insertionSort_2($testSortData);
echo 'insertionSort_2 Result:';
echo PHP_EOL;
echo(implode(',', $sortResult));
echo PHP_EOL;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现