前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序算法-插入排序

排序算法-插入排序

作者头像
guanguans
发布2018-05-09 10:32:37
4810
发布2018-05-09 10:32:37
举报
文章被收录于专栏:琯琯博客

排序算法-插入排序

代码语言:javascript
复制
<?php
/**
* 插入排序.
*
* @param  array   $value 待排序数组
* @param  integer $point 起始位置
*
* @return array
*/
function insert(&$value=[], $point=0)
{
if ($point >= count($value) - 1) {
    return;
}
$next  = $value[$point + 1]; // 下一个待插入值
// 从后向前遍历已排序数组
for ($i=$point; $i >= 0; --$i) {
    // 如果当前已排序值大于 待插入值
    // 把当前值后往后移动一位
    // 继续向前遍历
    if ($value[$i] > $next) {
        $value[$i+1] = $value[$i];
        // 如果到开头,自动到插入头位
        if ($i === 0) {
          $value[$i] = $next;
          break;
        }
        continue;
    }
    // 如果,当前已排序值小于或等于 待插入值
    // 则,在当前值后插入 当前待插入值
    // 特殊:如果末尾值小于或等于待插入值 则当前值后插入本身
    $value[$i+1] = $next;
    break;
}
$point += 1;// 已排序末尾位置

// 递归
insert($value, $point);

return $value;
}

/**
* 插入排序 for循环版
*
* @param  array   $value 待排序数组
*
* @return array
*/
function insert_for($arr=array())
{
    $len = count($arr);
    for($i = 1; $i < $len; $i++) {
        $base = $arr[$i];
        for($j = $i - 1; $j >= 0; $j--) {
            if ($base < $arr[$j]) {
                $arr[$j + 1] = $arr[$j];
                if ($j === 0) {
                    $arr[$j] = $base;
                    break;
                }
                continue;
            }
            $arr[$j + 1] = $base;
            break;
        }
    }
    return $arr;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档