码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序

时间:2015-05-18 16:50:00      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:php   插入排序   

概述

技术分享
??插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。
??如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函数。如果输入数组是逆序排列的,将出现最坏情况。平均情况与最坏情况一样,其时间代价是Θ(n2)。
??也许你没有意识到,但其实你的思考过程是这样的:现在抓到一张7,把它和手里的牌从右到左依次比较,7比10小,应该再往左插,7比5大,好,就插这里。为什么比较了10和5就可以确定7的位置?为什么不用再比较左边的4和2呢?因为这里有一个重要的前提:手里的牌已经是排好序的。现在我插了7之后,手里的牌仍然是排好序的,下次再抓到的牌还可以用这个方法插入。编程对一个数组进行插入排序也是同样道理,但和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。

理论

http://www.cnblogs.com/fanyong/archive/2012/03/23/2413553.html
http://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F

代码(PHP)

插入排序

//简单插入排序(O(n2))
function insertSort($arr){//升序排列
    $length = count($arr);
    if($length <= 1){//输入数组至少有两个值
        return $arr;
    }

    $sort_arr = array($arr[0],$arr[1]);
    if($arr[0]>$arr[1]){
        list($sort_arr[0],$sort_arr[1]) = array($sort_arr[1],$sort_arr[0]);
    }
    for($i=2;$i<$length;$i++){
        $sort_length = count($sort_arr);
        $sort_arr[$sort_length]= null;
        for($j=$sort_length-1;$j >= 0;$j--){
            if($sort_arr[$j] > $arr[$i]){
                $sort_arr[$j+1] = $sort_arr[$j];
            }else{
                $sort_arr[$j+1] = $arr[$i];
                break;
            }
        }
        if($j==-1){
            $sort_arr[0] = $arr[$i];
        }
    }
    return $sort_arr;
}

调用

$item =array(‘2‘,‘1‘,‘4‘,‘3‘,‘8‘,‘6‘,‘5‘,‘-1‘,‘10‘,‘3‘,‘7‘,‘6‘,‘6‘);
var_dump(implode(‘,‘,$item));
var_dump(implode(‘,‘,insertSort($item)));

结果

技术分享

插入排序

标签:php   插入排序   

原文地址:http://blog.csdn.net/pursuing0my0dream/article/details/45822907

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!