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

php算法----直接插入排序

时间:2018-03-17 16:50:20      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:中间   控制   一个人   net   http   array   blog   baidu   bsp   

算法引入

扑克牌是我们几乎每个人都玩过的游戏。平时我们开始的时候一般都是一个人发牌,其他人都是一边摸牌,一边理牌,假如你摸上的第一张牌是 5,第二张牌是 3,自然而然的我们把 3 插到 5 的前面;第三张牌是 4,查到 3 和 5 的中间;第四张牌是 6,放到 5 的后面;第五张牌是 2,插到 3 的前面;……。最后当我们摸完所有的牌时,手上的牌都是从小到大(点数)排好序的。

 

<?php
//利用for循环把元素1插入到数组[2,3,4,5]头部
//思路就是把前面数组元素的值赋给后面的数组元素的值,既所有元素的位置向后挪动一下,然后索引0得位置就空出来了可以放插入的元素了
function arr_push(array &$arr,$insert){
		$count = count($arr);
		for($i=$count;$i>0;$i--){
			$arr[$i]=$arr[$i-1];
		}
		$arr[0]=$insert;	

}
$arr = [2,3,4,5];
arr_push($arr,1);
echo ‘<pre>‘;
print_r($arr);

//直接插入排序
//思路假设第一个元素是已经存在的有序表,从第二个元素开始拿来和前面有序表的元素作比较,
//比插入元素大的元素都向后移动一下,空出来的位置就是该元素插入的位置。
//由两层for循环完成,外层控制元素值,内层作比较然后向后挪动
function InsertSort(array &$arr){
    $count = count($arr);
    //数组中第一个元素作为一个已经存在的有序表,所以从第二个元素即索引为1的元素开始与前面的有序表比较
    for($i = 1;$i < $count;$i ++){
        $temp = $arr[$i];      //设置哨兵,存储插进来的元素
        for($j = $i - 1;$j >= 0 && $arr[$j] > $temp;$j --){
            $arr[$j + 1] = $arr[$j];       //记录后移,位置空出来
        }
        $arr[$j + 1] = $temp;      //插入到元素后移后空出来的正确位置

    }
}

$arr = array(9,1,5,8,3,7,4,6,2);
InsertSort($arr);
echo ‘<pre>‘;
print_r($arr);
       
  

  

参考http://blog.csdn.net/baidu_30000217/article/details/53072746

php算法----直接插入排序

标签:中间   控制   一个人   net   http   array   blog   baidu   bsp   

原文地址:https://www.cnblogs.com/zxqblogrecord/p/8590628.html

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