排序算法-插入排序

排序算法-插入排序

<?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;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏行者常至

final、abstract、interface

【包含抽象方法的类一定是抽象类;抽象类中可包括非抽象方法(具体的方法)。抽象类无法实例化,不能创建对象,只能通过子类继承,然后通过方法覆盖。如果不覆盖抽象方法,...

9610
来自专栏龙首琴剑庐

Java可变参数列表

1、接受的传入参数情况 如public void test(String ...args){...}  1)不使用参数,如test() 2)使用一个或多个参数,...

33770
来自专栏跟着阿笨一起玩NET

C#基础知识之方法重载总结

方法重载是指在同一个类中方法同名,参数不同,调用时根据实参的形式,选择与他匹配的方法执行操作的一种技术。

11320
来自专栏待你如初见

Day08

13030
来自专栏java学习

Java每日一练(2017/6/16)

题目要求 本期题目:(注解练习) 1.自定义一个可以用来接收用户登录信息的注解,将用户名和密码设置到验证的方法中, 例如: @LoginInfo(name="张...

301130
来自专栏软件开发 -- 分享 互助 成长

java中的==和equals

一、使用==判断两个变量是否相等 (1)对于基本类型的变量,值相等则返回true (2)对于引用类型的变量,只有指向同一个对象时才返回true。 ==不可以比较...

20660
来自专栏积累沉淀

线程的创建

创建一个Java线程常见的有两种方式: 1.继承Thread类 两种表示方法: (1).外部类 import java.util.D...

21880
来自专栏学海无涯

12.Any、AnyObject与类型转化

19140
来自专栏运维技术迷

连仕彤博客[Python笔记] 判断0-9数字在字符串中出现的次数

要求 给定一些数字(0-9范围之间),判断数字在字符串中出现的次数。 例子的排序是依照算法的效率(时间复杂度)从低到高 例子1   # 定义数字 num = ...

42370
来自专栏积累沉淀

程序、进程、线程的关系

创建一个Java线程常见的有两种方式: 1.继承Thread类 两种表示方法: (1).外部类 import java.util.D...

20360

扫码关注云+社区

领取腾讯云代金券